Add calls to CWallet::BlockUntilSyncedToCurrentChain() in RPCs
This prevents the wallet-RPCs-return-stale-info issue from being re-introduced when new-block callbacks no longer happen in the block-connection cs_main lock
This commit is contained in:
parent
5ee3172636
commit
5d67a7868d
1 changed files with 100 additions and 0 deletions
|
@ -455,6 +455,11 @@ UniValue sendtoaddress(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
CTxDestination dest = DecodeDestination(request.params[0].get_str());
|
CTxDestination dest = DecodeDestination(request.params[0].get_str());
|
||||||
|
@ -533,6 +538,11 @@ UniValue listaddressgroupings(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
UniValue jsonGroupings(UniValue::VARR);
|
UniValue jsonGroupings(UniValue::VARR);
|
||||||
|
@ -645,6 +655,11 @@ UniValue getreceivedbyaddress(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
// Bitcoin address
|
// Bitcoin address
|
||||||
|
@ -707,6 +722,11 @@ UniValue getreceivedbyaccount(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
// Minimum confirmations
|
// Minimum confirmations
|
||||||
|
@ -780,6 +800,11 @@ UniValue getbalance(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
const UniValue& account_value = request.params[0];
|
const UniValue& account_value = request.params[0];
|
||||||
|
@ -825,6 +850,11 @@ UniValue getunconfirmedbalance(const JSONRPCRequest &request)
|
||||||
"Returns the server's total unconfirmed balance\n");
|
"Returns the server's total unconfirmed balance\n");
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
return ValueFromAmount(pwallet->GetUnconfirmedBalance());
|
return ValueFromAmount(pwallet->GetUnconfirmedBalance());
|
||||||
|
@ -919,6 +949,11 @@ UniValue sendfrom(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
std::string strAccount = AccountFromValue(request.params[0]);
|
std::string strAccount = AccountFromValue(request.params[0]);
|
||||||
|
@ -1004,6 +1039,11 @@ UniValue sendmany(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
if (pwallet->GetBroadcastTransactions() && !g_connman) {
|
if (pwallet->GetBroadcastTransactions() && !g_connman) {
|
||||||
|
@ -1455,6 +1495,11 @@ UniValue listreceivedbyaddress(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
return ListReceived(pwallet, request.params, false);
|
return ListReceived(pwallet, request.params, false);
|
||||||
|
@ -1495,6 +1540,11 @@ UniValue listreceivedbyaccount(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
return ListReceived(pwallet, request.params, true);
|
return ListReceived(pwallet, request.params, true);
|
||||||
|
@ -1683,6 +1733,11 @@ UniValue listtransactions(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
std::string strAccount = "*";
|
std::string strAccount = "*";
|
||||||
|
@ -1777,6 +1832,11 @@ UniValue listaccounts(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
int nMinDepth = 1;
|
int nMinDepth = 1;
|
||||||
|
@ -1886,6 +1946,11 @@ UniValue listsinceblock(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
const CBlockIndex* pindex = nullptr; // Block index of the specified block or the common ancestor, if the block provided was in a deactivated chain.
|
const CBlockIndex* pindex = nullptr; // Block index of the specified block or the common ancestor, if the block provided was in a deactivated chain.
|
||||||
|
@ -2018,6 +2083,11 @@ UniValue gettransaction(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
uint256 hash;
|
uint256 hash;
|
||||||
|
@ -2080,6 +2150,11 @@ UniValue abandontransaction(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
uint256 hash;
|
uint256 hash;
|
||||||
|
@ -2114,6 +2189,10 @@ UniValue backupwallet(const JSONRPCRequest& request)
|
||||||
+ HelpExampleRpc("backupwallet", "\"backup.dat\"")
|
+ HelpExampleRpc("backupwallet", "\"backup.dat\"")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
std::string strDest = request.params[0].get_str();
|
std::string strDest = request.params[0].get_str();
|
||||||
|
@ -2433,6 +2512,10 @@ UniValue lockunspent(const JSONRPCRequest& request)
|
||||||
+ HelpExampleRpc("lockunspent", "false, \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"")
|
+ HelpExampleRpc("lockunspent", "false, \"[{\\\"txid\\\":\\\"a08e6907dbbd3d809776dbfc5d82e371b764ed838b5655e72f463568df1aadf0\\\",\\\"vout\\\":1}]\"")
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
RPCTypeCheckArgument(request.params[0], UniValue::VBOOL);
|
RPCTypeCheckArgument(request.params[0], UniValue::VBOOL);
|
||||||
|
@ -2592,6 +2675,11 @@ UniValue getwalletinfo(const JSONRPCRequest& request)
|
||||||
);
|
);
|
||||||
|
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
|
|
||||||
UniValue obj(UniValue::VOBJ);
|
UniValue obj(UniValue::VOBJ);
|
||||||
|
@ -2801,6 +2889,10 @@ UniValue listunspent(const JSONRPCRequest& request)
|
||||||
nMaximumCount = options["maximumCount"].get_int64();
|
nMaximumCount = options["maximumCount"].get_int64();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
UniValue results(UniValue::VARR);
|
UniValue results(UniValue::VARR);
|
||||||
std::vector<COutput> vecOutputs;
|
std::vector<COutput> vecOutputs;
|
||||||
assert(pwallet != nullptr);
|
assert(pwallet != nullptr);
|
||||||
|
@ -2911,6 +3003,10 @@ UniValue fundrawtransaction(const JSONRPCRequest& request)
|
||||||
ObserveSafeMode();
|
ObserveSafeMode();
|
||||||
RPCTypeCheck(request.params, {UniValue::VSTR});
|
RPCTypeCheck(request.params, {UniValue::VSTR});
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
CCoinControl coinControl;
|
CCoinControl coinControl;
|
||||||
int changePosition = -1;
|
int changePosition = -1;
|
||||||
bool lockUnspents = false;
|
bool lockUnspents = false;
|
||||||
|
@ -3121,6 +3217,10 @@ UniValue bumpfee(const JSONRPCRequest& request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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
|
||||||
|
pwallet->BlockUntilSyncedToCurrentChain();
|
||||||
|
|
||||||
LOCK2(cs_main, pwallet->cs_wallet);
|
LOCK2(cs_main, pwallet->cs_wallet);
|
||||||
EnsureWalletIsUnlocked(pwallet);
|
EnsureWalletIsUnlocked(pwallet);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue