mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-05-03 08:21:29 +02:00
wallet: Use std::optional for GetExternalOutput and fixups
This commit is contained in:
parent
becc45b589
commit
1db23da6e1
@ -13,9 +13,9 @@
|
||||
#include <script/signingprovider.h>
|
||||
#include <script/standard.h>
|
||||
|
||||
#include <optional>
|
||||
#include <algorithm>
|
||||
#include <map>
|
||||
#include <optional>
|
||||
#include <set>
|
||||
|
||||
namespace wallet {
|
||||
@ -65,27 +65,27 @@ public:
|
||||
|
||||
bool HasSelected() const
|
||||
{
|
||||
return (m_selected_inputs.size() > 0);
|
||||
return !m_selected_inputs.empty();
|
||||
}
|
||||
|
||||
bool IsSelected(const COutPoint& output) const
|
||||
{
|
||||
return (m_selected_inputs.count(output) > 0);
|
||||
return m_selected_inputs.count(output) > 0;
|
||||
}
|
||||
|
||||
bool IsExternalSelected(const COutPoint& output) const
|
||||
{
|
||||
return (m_external_txouts.count(output) > 0);
|
||||
return m_external_txouts.count(output) > 0;
|
||||
}
|
||||
|
||||
bool GetExternalOutput(const COutPoint& outpoint, CTxOut& txout) const
|
||||
std::optional<CTxOut> GetExternalOutput(const COutPoint& outpoint) const
|
||||
{
|
||||
const auto ext_it = m_external_txouts.find(outpoint);
|
||||
if (ext_it == m_external_txouts.end()) {
|
||||
return false;
|
||||
return std::nullopt;
|
||||
}
|
||||
txout = ext_it->second;
|
||||
return true;
|
||||
|
||||
return std::make_optional(ext_it->second);
|
||||
}
|
||||
|
||||
void Select(const COutPoint& output)
|
||||
|
@ -52,9 +52,7 @@ int CalculateMaximumSignedInputSize(const CTxOut& txout, const CWallet* wallet,
|
||||
TxSize CalculateMaximumSignedTxSize(const CTransaction &tx, const CWallet *wallet, const std::vector<CTxOut>& txouts, const CCoinControl* coin_control)
|
||||
{
|
||||
CMutableTransaction txNew(tx);
|
||||
if (!wallet->DummySignTx(txNew, txouts, coin_control)) {
|
||||
return TxSize{-1, -1};
|
||||
}
|
||||
if (!wallet->DummySignTx(txNew, txouts, coin_control)) return TxSize{-1, -1};
|
||||
CTransaction ctx(txNew);
|
||||
int64_t vsize = GetVirtualTransactionSize(ctx);
|
||||
int64_t weight = GetTransactionWeight(ctx);
|
||||
@ -72,11 +70,9 @@ TxSize CalculateMaximumSignedTxSize(const CTransaction &tx, const CWallet *walle
|
||||
assert(input.prevout.n < mi->second.tx->vout.size());
|
||||
txouts.emplace_back(mi->second.tx->vout.at(input.prevout.n));
|
||||
} else if (coin_control) {
|
||||
CTxOut txout;
|
||||
if (!coin_control->GetExternalOutput(input.prevout, txout)) {
|
||||
return TxSize{-1, -1};
|
||||
}
|
||||
txouts.emplace_back(txout);
|
||||
const auto& txout{coin_control->GetExternalOutput(input.prevout)};
|
||||
if (!txout) return TxSize{-1, -1};
|
||||
txouts.emplace_back(*txout);
|
||||
} else {
|
||||
return TxSize{-1, -1};
|
||||
}
|
||||
@ -178,9 +174,12 @@ util::Result<PreSelectedInputs> FetchSelectedInputs(const CWallet& wallet, const
|
||||
input_bytes = CalculateMaximumSignedInputSize(txout, &wallet, &coin_control);
|
||||
} else {
|
||||
// The input is external. We did not find the tx in mapWallet.
|
||||
if (!coin_control.GetExternalOutput(outpoint, txout)) {
|
||||
const auto out{coin_control.GetExternalOutput(outpoint)};
|
||||
if (!out) {
|
||||
return util::Error{strprintf(_("Not found pre-selected input %s"), outpoint.ToString())};
|
||||
}
|
||||
|
||||
txout = *out;
|
||||
}
|
||||
|
||||
if (input_bytes == -1) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user