mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-06 14:19:59 -05:00
wallet: Replace SelectExternal with SetTxOut
Instead of having a separate CCoinControl::SelectExternal function, we can use the normal CCoinControl::Select function and explicitly use PreselectedInput::SetTxOut in the caller. The semantics of what an external input is remains.
This commit is contained in:
parent
5321786b9d
commit
596642c5a9
6 changed files with 13 additions and 25 deletions
|
@ -41,12 +41,6 @@ PreselectedInput& CCoinControl::Select(const COutPoint& outpoint)
|
|||
{
|
||||
return m_selected[outpoint];
|
||||
}
|
||||
|
||||
void CCoinControl::SelectExternal(const COutPoint& outpoint, const CTxOut& txout)
|
||||
{
|
||||
m_selected[outpoint].SetTxOut(txout);
|
||||
}
|
||||
|
||||
void CCoinControl::UnSelect(const COutPoint& outpoint)
|
||||
{
|
||||
m_selected.erase(outpoint);
|
||||
|
|
|
@ -108,11 +108,6 @@ public:
|
|||
* The output will be included in the transaction even if it's not the most optimal choice.
|
||||
*/
|
||||
PreselectedInput& Select(const COutPoint& outpoint);
|
||||
/**
|
||||
* Lock-in the given output as an external input for spending because it is not in the wallet.
|
||||
* The output will be included in the transaction even if it's not the most optimal choice.
|
||||
*/
|
||||
void SelectExternal(const COutPoint& outpoint, const CTxOut& txout);
|
||||
/**
|
||||
* Unselects the given output.
|
||||
*/
|
||||
|
|
|
@ -203,10 +203,9 @@ Result CreateRateBumpTransaction(CWallet& wallet, const uint256& txid, const CCo
|
|||
errors.push_back(Untranslated(strprintf("%s:%u is already spent", txin.prevout.hash.GetHex(), txin.prevout.n)));
|
||||
return Result::MISC_ERROR;
|
||||
}
|
||||
if (wallet.IsMine(txin.prevout)) {
|
||||
new_coin_control.Select(txin.prevout);
|
||||
} else {
|
||||
new_coin_control.SelectExternal(txin.prevout, coin.out);
|
||||
PreselectedInput& preset_txin = new_coin_control.Select(txin.prevout);
|
||||
if (!wallet.IsMine(txin.prevout)) {
|
||||
preset_txin.SetTxOut(coin.out);
|
||||
}
|
||||
input_value += coin.out.nValue;
|
||||
spent_outputs.push_back(coin.out);
|
||||
|
|
|
@ -1347,15 +1347,15 @@ bool FundTransaction(CWallet& wallet, CMutableTransaction& tx, CAmount& nFeeRet,
|
|||
|
||||
for (const CTxIn& txin : tx.vin) {
|
||||
const auto& outPoint = txin.prevout;
|
||||
if (wallet.IsMine(outPoint)) {
|
||||
// The input was found in the wallet, so select as internal
|
||||
coinControl.Select(outPoint);
|
||||
} else if (coins[outPoint].out.IsNull()) {
|
||||
error = _("Unable to find UTXO for external input");
|
||||
return false;
|
||||
} else {
|
||||
PreselectedInput& preset_txin = coinControl.Select(outPoint);
|
||||
if (!wallet.IsMine(outPoint)) {
|
||||
if (coins[outPoint].out.IsNull()) {
|
||||
error = _("Unable to find UTXO for external input");
|
||||
return false;
|
||||
}
|
||||
|
||||
// The input was not in the wallet, but is in the UTXO set, so select as external
|
||||
coinControl.SelectExternal(outPoint, coins[outPoint].out);
|
||||
preset_txin.SetTxOut(coins[outPoint].out);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1282,7 +1282,7 @@ BOOST_AUTO_TEST_CASE(SelectCoins_effective_value_test)
|
|||
cc.m_allow_other_inputs = false;
|
||||
COutput output = available_coins.All().at(0);
|
||||
cc.SetInputWeight(output.outpoint, 148);
|
||||
cc.SelectExternal(output.outpoint, output.txout);
|
||||
cc.Select(output.outpoint).SetTxOut(output.txout);
|
||||
|
||||
LOCK(wallet->cs_wallet);
|
||||
const auto preset_inputs = *Assert(FetchSelectedInputs(*wallet, cc, cs_params));
|
||||
|
|
|
@ -60,7 +60,7 @@ FUZZ_TARGET(coincontrol, .init = initialize_coincontrol)
|
|||
},
|
||||
[&] {
|
||||
const CTxOut tx_out{ConsumeMoney(fuzzed_data_provider), ConsumeScript(fuzzed_data_provider)};
|
||||
(void)coin_control.SelectExternal(out_point, tx_out);
|
||||
(void)coin_control.Select(out_point).SetTxOut(tx_out);
|
||||
},
|
||||
[&] {
|
||||
(void)coin_control.UnSelect(out_point);
|
||||
|
|
Loading…
Add table
Reference in a new issue