|
|
|
@ -80,6 +80,38 @@ std::string COutput::ToString() const
@@ -80,6 +80,38 @@ std::string COutput::ToString() const
|
|
|
|
|
return strprintf("COutput(%s, %d, %d) [%s]", tx->GetHash().ToString(), i, nDepth, FormatMoney(tx->tx->vout[i].nValue)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
class CAffectedKeysVisitor : public boost::static_visitor<void> { |
|
|
|
|
private: |
|
|
|
|
const CKeyStore &keystore; |
|
|
|
|
std::vector<CKeyID> &vKeys; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
CAffectedKeysVisitor(const CKeyStore &keystoreIn, std::vector<CKeyID> &vKeysIn) : keystore(keystoreIn), vKeys(vKeysIn) {} |
|
|
|
|
|
|
|
|
|
void Process(const CScript &script) { |
|
|
|
|
txnouttype type; |
|
|
|
|
std::vector<CTxDestination> vDest; |
|
|
|
|
int nRequired; |
|
|
|
|
if (ExtractDestinations(script, type, vDest, nRequired)) { |
|
|
|
|
for (const CTxDestination &dest : vDest) |
|
|
|
|
boost::apply_visitor(*this, dest); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CKeyID &keyId) { |
|
|
|
|
if (keystore.HaveKey(keyId)) |
|
|
|
|
vKeys.push_back(keyId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CScriptID &scriptId) { |
|
|
|
|
CScript script; |
|
|
|
|
if (keystore.GetCScript(scriptId, script)) |
|
|
|
|
Process(script); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CNoDestination &none) {} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const CWalletTx* CWallet::GetWalletTx(const uint256& hash) const |
|
|
|
|
{ |
|
|
|
|
LOCK(cs_wallet); |
|
|
|
@ -3629,38 +3661,6 @@ void CWallet::ListLockedCoins(std::vector<COutPoint>& vOutpts) const
@@ -3629,38 +3661,6 @@ void CWallet::ListLockedCoins(std::vector<COutPoint>& vOutpts) const
|
|
|
|
|
|
|
|
|
|
/** @} */ // end of Actions
|
|
|
|
|
|
|
|
|
|
class CAffectedKeysVisitor : public boost::static_visitor<void> { |
|
|
|
|
private: |
|
|
|
|
const CKeyStore &keystore; |
|
|
|
|
std::vector<CKeyID> &vKeys; |
|
|
|
|
|
|
|
|
|
public: |
|
|
|
|
CAffectedKeysVisitor(const CKeyStore &keystoreIn, std::vector<CKeyID> &vKeysIn) : keystore(keystoreIn), vKeys(vKeysIn) {} |
|
|
|
|
|
|
|
|
|
void Process(const CScript &script) { |
|
|
|
|
txnouttype type; |
|
|
|
|
std::vector<CTxDestination> vDest; |
|
|
|
|
int nRequired; |
|
|
|
|
if (ExtractDestinations(script, type, vDest, nRequired)) { |
|
|
|
|
for (const CTxDestination &dest : vDest) |
|
|
|
|
boost::apply_visitor(*this, dest); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CKeyID &keyId) { |
|
|
|
|
if (keystore.HaveKey(keyId)) |
|
|
|
|
vKeys.push_back(keyId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CScriptID &scriptId) { |
|
|
|
|
CScript script; |
|
|
|
|
if (keystore.GetCScript(scriptId, script)) |
|
|
|
|
Process(script); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void operator()(const CNoDestination &none) {} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void CWallet::GetKeyBirthTimes(std::map<CTxDestination, int64_t> &mapKeyBirth) const { |
|
|
|
|
AssertLockHeld(cs_wallet); // mapKeyMetadata
|
|
|
|
|
mapKeyBirth.clear(); |
|
|
|
|