wallet: decouple IsSpentKey(scriptPubKey) from IsSpentKey(hash, n)
This will be used in a follow-up commit to prevent extra 'GetWalletTx' lookups if the function caller already have the wtx and can just provide the scriptPubKey directly.
This commit is contained in:
2 files changed
+31
-25
No files matched your search
+30
-25
@@ -910,31 +910,36 @@ bool CWallet::IsSpentKey(const uint256& hash, unsigned int n) const
|
|||||||
{
|
{
|
||||||
AssertLockHeld(cs_wallet);
|
AssertLockHeld(cs_wallet);
|
||||||
const CWalletTx* srctx = GetWalletTx(hash);
|
const CWalletTx* srctx = GetWalletTx(hash);
|
||||||
if (srctx) {
|
if (!srctx) return false;
|
||||||
assert(srctx->tx->vout.size() > n);
|
assert(srctx->tx->vout.size() > n);
|
||||||
CTxDestination dest;
|
return IsSpentKey(srctx->tx->vout[n].scriptPubKey);
|
||||||
if (!ExtractDestination(srctx->tx->vout[n].scriptPubKey, dest)) {
|
}
|
||||||
return false;
|
|
||||||
}
|
bool CWallet::IsSpentKey(const CScript& scriptPubKey) const
|
||||||
if (IsAddressUsed(dest)) {
|
{
|
||||||
return true;
|
AssertLockHeld(cs_wallet);
|
||||||
}
|
CTxDestination dest;
|
||||||
if (IsLegacy()) {
|
if (!ExtractDestination(scriptPubKey, dest)) {
|
||||||
LegacyScriptPubKeyMan* spk_man = GetLegacyScriptPubKeyMan();
|
return false;
|
||||||
assert(spk_man != nullptr);
|
}
|
||||||
for (const auto& keyid : GetAffectedKeys(srctx->tx->vout[n].scriptPubKey, *spk_man)) {
|
if (IsAddressUsed(dest)) {
|
||||||
WitnessV0KeyHash wpkh_dest(keyid);
|
return true;
|
||||||
if (IsAddressUsed(wpkh_dest)) {
|
}
|
||||||
return true;
|
if (IsLegacy()) {
|
||||||
}
|
LegacyScriptPubKeyMan* spk_man = GetLegacyScriptPubKeyMan();
|
||||||
ScriptHash sh_wpkh_dest(GetScriptForDestination(wpkh_dest));
|
assert(spk_man != nullptr);
|
||||||
if (IsAddressUsed(sh_wpkh_dest)) {
|
for (const auto& keyid : GetAffectedKeys(scriptPubKey, *spk_man)) {
|
||||||
return true;
|
WitnessV0KeyHash wpkh_dest(keyid);
|
||||||
}
|
if (IsAddressUsed(wpkh_dest)) {
|
||||||
PKHash pkh_dest(keyid);
|
return true;
|
||||||
if (IsAddressUsed(pkh_dest)) {
|
}
|
||||||
return true;
|
ScriptHash sh_wpkh_dest(GetScriptForDestination(wpkh_dest));
|
||||||
}
|
if (IsAddressUsed(sh_wpkh_dest)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
PKHash pkh_dest(keyid);
|
||||||
|
if (IsAddressUsed(pkh_dest)) {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -445,6 +445,7 @@ public:
|
|||||||
|
|
||||||
// Whether this or any known UTXO with the same single key has been spent.
|
// Whether this or any known UTXO with the same single key has been spent.
|
||||||
bool IsSpentKey(const uint256& hash, unsigned int n) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool IsSpentKey(const uint256& hash, unsigned int n) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
|
bool IsSpentKey(const CScript& scriptPubKey) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
void SetSpentKeyState(WalletBatch& batch, const uint256& hash, unsigned int n, bool used, std::set<CTxDestination>& tx_destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
void SetSpentKeyState(WalletBatch& batch, const uint256& hash, unsigned int n, bool used, std::set<CTxDestination>& tx_destinations) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
|
|
||||||
/** Display address on an external signer. Returns false if external signer support is not compiled */
|
/** Display address on an external signer. Returns false if external signer support is not compiled */
|
||||||
|
|||||||
Reference in new issue
Block a user