mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 15:19:07 +01:00
wallet: SelectExternal actually external inputs
If an external input's utxo was created by a transaction that the wallet knows about, then it would not be selected using SelectExternal. This results in either funding failure or incorrect weight calculation.
This commit is contained in:
@@ -1127,12 +1127,16 @@ bool FundTransaction(CWallet& wallet, CMutableTransaction& tx, CAmount& nFeeRet,
|
||||
wallet.chain().findCoins(coins);
|
||||
|
||||
for (const CTxIn& txin : tx.vin) {
|
||||
// if it's not in the wallet and corresponding UTXO is found than select as external output
|
||||
const auto& outPoint = txin.prevout;
|
||||
if (wallet.mapWallet.find(outPoint.hash) == wallet.mapWallet.end() && !coins[outPoint].out.IsNull()) {
|
||||
coinControl.SelectExternal(outPoint, coins[outPoint].out);
|
||||
} else {
|
||||
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 {
|
||||
// The input was not in the wallet, but is in the UTXO set, so select as external
|
||||
coinControl.SelectExternal(outPoint, coins[outPoint].out);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user