Merge bitcoin/bitcoin#22308: wallet: Add missing BlockUntilSyncedToCurrentChain

fa27baa9c8a13239625e5a7b6c472d236fe5b9fa Revert "test: Add temporary logging to debug #20975" (MarcoFalke)
fadb55085a02c9e355617bcb5f84b6335e4f8c9d wallet: Add missing BlockUntilSyncedToCurrentChain (MarcoFalke)

Pull request description:

  Fixes #20975

  Also replace the wallet pointer by a reference

ACKs for top commit:
  achow101:
    ACK fa27baa9c8a13239625e5a7b6c472d236fe5b9fa

Tree-SHA512: 79047a30998104a12c2ff84a8e3cc5207151410bbe92b74cfedbe1c1aca3ffa5909391607fc597f3a3cf0725fa827528a4c57edaeacc8360536b1965e166be6a
This commit is contained in:
MarcoFalke 2021-06-22 23:08:16 +02:00 committed by Konstantin Akimov
parent 240d8efb82
commit 62f9394374
No known key found for this signature in database
GPG Key ID: 2176C4A5D01EA524
2 changed files with 17 additions and 14 deletions

View File

@ -4381,9 +4381,13 @@ RPCHelpMan walletprocesspsbt()
{ {
RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VBOOL, UniValue::VSTR}); RPCTypeCheck(request.params, {UniValue::VSTR, UniValue::VBOOL, UniValue::VSTR});
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request); std::shared_ptr<CWallet> const pwallet = GetWalletForJSONRPCRequest(request);
if (!wallet) return NullUniValue; if (!pwallet) return NullUniValue;
const CWallet* const pwallet = wallet.get();
const CWallet& wallet{*pwallet};
// Make sure the results are valid at least up to the most recent block
// the user could have gotten from another RPC command prior to now
wallet.BlockUntilSyncedToCurrentChain();
// Unserialize the transaction // Unserialize the transaction
PartiallySignedTransaction psbtx; PartiallySignedTransaction psbtx;
@ -4403,7 +4407,7 @@ RPCHelpMan walletprocesspsbt()
bool sign = request.params[1].isNull() ? true : request.params[1].get_bool(); bool sign = request.params[1].isNull() ? true : request.params[1].get_bool();
bool bip32derivs = request.params[3].isNull() ? true : request.params[3].get_bool(); bool bip32derivs = request.params[3].isNull() ? true : request.params[3].get_bool();
bool complete = true; bool complete = true;
const TransactionError err = pwallet->FillPSBT(psbtx, complete, nHashType, sign, bip32derivs); const TransactionError err{wallet.FillPSBT(psbtx, complete, nHashType, sign, bip32derivs)};
if (err != TransactionError::OK) { if (err != TransactionError::OK) {
throw JSONRPCTransactionError(err); throw JSONRPCTransactionError(err);
} }
@ -4500,9 +4504,13 @@ static RPCHelpMan walletcreatefundedpsbt()
}, true }, true
); );
std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request); std::shared_ptr<CWallet> const pwallet = GetWalletForJSONRPCRequest(request);
if (!wallet) return NullUniValue; if (!pwallet) return NullUniValue;
CWallet* const pwallet = wallet.get();
CWallet& wallet{*pwallet};
// Make sure the results are valid at least up to the most recent block
// the user could have gotten from another RPC command prior to now
wallet.BlockUntilSyncedToCurrentChain();
CAmount fee; CAmount fee;
int change_position; int change_position;
@ -4511,7 +4519,7 @@ static RPCHelpMan walletcreatefundedpsbt()
// Automatically select coins, unless at least one is manually selected. Can // Automatically select coins, unless at least one is manually selected. Can
// be overridden by options.add_inputs. // be overridden by options.add_inputs.
coin_control.m_add_inputs = rawTx.vin.size() == 0; coin_control.m_add_inputs = rawTx.vin.size() == 0;
FundTransaction(pwallet, rawTx, fee, change_position, request.params[3], coin_control); FundTransaction(&wallet, rawTx, fee, change_position, request.params[3], coin_control);
// Make a blank psbt // Make a blank psbt
PartiallySignedTransaction psbtx{rawTx}; PartiallySignedTransaction psbtx{rawTx};
@ -4519,7 +4527,7 @@ static RPCHelpMan walletcreatefundedpsbt()
// Fill transaction with out data but don't sign // Fill transaction with out data but don't sign
bool bip32derivs = request.params[4].isNull() ? true : request.params[4].get_bool(); bool bip32derivs = request.params[4].isNull() ? true : request.params[4].get_bool();
bool complete = true; bool complete = true;
const TransactionError err = pwallet->FillPSBT(psbtx, complete, 1, false, bip32derivs); const TransactionError err{wallet.FillPSBT(psbtx, complete, 1, false, bip32derivs)};
if (err != TransactionError::OK) { if (err != TransactionError::OK) {
throw JSONRPCTransactionError(err); throw JSONRPCTransactionError(err);
} }

View File

@ -223,11 +223,6 @@ def create_raw_transaction(node, txid, to_address, *, amount):
signed_psbt = wrpc.walletprocesspsbt(psbt) signed_psbt = wrpc.walletprocesspsbt(psbt)
psbt = signed_psbt['psbt'] psbt = signed_psbt['psbt']
final_psbt = node.finalizepsbt(psbt) final_psbt = node.finalizepsbt(psbt)
if not final_psbt["complete"]:
node.log.info(f'final_psbt={final_psbt}')
for w in node.listwallets():
wrpc = node.get_wallet_rpc(w)
node.log.info(f'listunspent={wrpc.listunspent()}')
assert_equal(final_psbt["complete"], True) assert_equal(final_psbt["complete"], True)
return final_psbt['hex'] return final_psbt['hex']