mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-22 15:04:44 +01:00
wallet: Reuse existing batch in CWallet::SetUsedDestinationState
This commit is contained in:
parent
01f45dd00e
commit
0b75a7f068
4 changed files with 19 additions and 16 deletions
|
@ -170,12 +170,14 @@ public:
|
||||||
bool addDestData(const CTxDestination& dest, const std::string& key, const std::string& value) override
|
bool addDestData(const CTxDestination& dest, const std::string& key, const std::string& value) override
|
||||||
{
|
{
|
||||||
LOCK(m_wallet->cs_wallet);
|
LOCK(m_wallet->cs_wallet);
|
||||||
return m_wallet->AddDestData(dest, key, value);
|
WalletBatch batch{m_wallet->GetDatabase()};
|
||||||
|
return m_wallet->AddDestData(batch, dest, key, value);
|
||||||
}
|
}
|
||||||
bool eraseDestData(const CTxDestination& dest, const std::string& key) override
|
bool eraseDestData(const CTxDestination& dest, const std::string& key) override
|
||||||
{
|
{
|
||||||
LOCK(m_wallet->cs_wallet);
|
LOCK(m_wallet->cs_wallet);
|
||||||
return m_wallet->EraseDestData(dest, key);
|
WalletBatch batch{m_wallet->GetDatabase()};
|
||||||
|
return m_wallet->EraseDestData(batch, dest, key);
|
||||||
}
|
}
|
||||||
std::vector<std::string> getDestValues(const std::string& prefix) override
|
std::vector<std::string> getDestValues(const std::string& prefix) override
|
||||||
{
|
{
|
||||||
|
|
|
@ -338,9 +338,10 @@ BOOST_AUTO_TEST_CASE(LoadReceiveRequests)
|
||||||
{
|
{
|
||||||
CTxDestination dest = PKHash();
|
CTxDestination dest = PKHash();
|
||||||
LOCK(m_wallet.cs_wallet);
|
LOCK(m_wallet.cs_wallet);
|
||||||
m_wallet.AddDestData(dest, "misc", "val_misc");
|
WalletBatch batch{m_wallet.GetDatabase()};
|
||||||
m_wallet.AddDestData(dest, "rr0", "val_rr0");
|
m_wallet.AddDestData(batch, dest, "misc", "val_misc");
|
||||||
m_wallet.AddDestData(dest, "rr1", "val_rr1");
|
m_wallet.AddDestData(batch, dest, "rr0", "val_rr0");
|
||||||
|
m_wallet.AddDestData(batch, dest, "rr1", "val_rr1");
|
||||||
|
|
||||||
auto values = m_wallet.GetDestValues("rr");
|
auto values = m_wallet.GetDestValues("rr");
|
||||||
BOOST_CHECK_EQUAL(values.size(), 2U);
|
BOOST_CHECK_EQUAL(values.size(), 2U);
|
||||||
|
|
|
@ -691,7 +691,7 @@ bool CWallet::MarkReplaced(const uint256& originalHash, const uint256& newHash)
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWallet::SetUsedDestinationState(const uint256& hash, unsigned int n, bool used)
|
void CWallet::SetUsedDestinationState(WalletBatch& batch, const uint256& hash, unsigned int n, bool used)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_wallet);
|
AssertLockHeld(cs_wallet);
|
||||||
const CWalletTx* srctx = GetWalletTx(hash);
|
const CWalletTx* srctx = GetWalletTx(hash);
|
||||||
|
@ -701,9 +701,9 @@ void CWallet::SetUsedDestinationState(const uint256& hash, unsigned int n, bool
|
||||||
if (ExtractDestination(srctx->tx->vout[n].scriptPubKey, dst)) {
|
if (ExtractDestination(srctx->tx->vout[n].scriptPubKey, dst)) {
|
||||||
if (IsMine(dst)) {
|
if (IsMine(dst)) {
|
||||||
if (used && !GetDestData(dst, "used", nullptr)) {
|
if (used && !GetDestData(dst, "used", nullptr)) {
|
||||||
AddDestData(dst, "used", "p"); // p for "present", opposite of absent (null)
|
AddDestData(batch, dst, "used", "p"); // p for "present", opposite of absent (null)
|
||||||
} else if (!used && GetDestData(dst, "used", nullptr)) {
|
} else if (!used && GetDestData(dst, "used", nullptr)) {
|
||||||
EraseDestData(dst, "used");
|
EraseDestData(batch, dst, "used");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -734,7 +734,7 @@ bool CWallet::AddToWallet(const CWalletTx& wtxIn, bool fFlushOnClose)
|
||||||
// Mark used destinations
|
// Mark used destinations
|
||||||
for (const CTxIn& txin : wtxIn.tx->vin) {
|
for (const CTxIn& txin : wtxIn.tx->vin) {
|
||||||
const COutPoint& op = txin.prevout;
|
const COutPoint& op = txin.prevout;
|
||||||
SetUsedDestinationState(op.hash, op.n, true);
|
SetUsedDestinationState(batch, op.hash, op.n, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3410,20 +3410,20 @@ unsigned int CWallet::ComputeTimeSmart(const CWalletTx& wtx) const
|
||||||
return nTimeSmart;
|
return nTimeSmart;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::AddDestData(const CTxDestination &dest, const std::string &key, const std::string &value)
|
bool CWallet::AddDestData(WalletBatch& batch, const CTxDestination &dest, const std::string &key, const std::string &value)
|
||||||
{
|
{
|
||||||
if (boost::get<CNoDestination>(&dest))
|
if (boost::get<CNoDestination>(&dest))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
mapAddressBook[dest].destdata.insert(std::make_pair(key, value));
|
mapAddressBook[dest].destdata.insert(std::make_pair(key, value));
|
||||||
return WalletBatch(*database).WriteDestData(EncodeDestination(dest), key, value);
|
return batch.WriteDestData(EncodeDestination(dest), key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::EraseDestData(const CTxDestination &dest, const std::string &key)
|
bool CWallet::EraseDestData(WalletBatch& batch, const CTxDestination &dest, const std::string &key)
|
||||||
{
|
{
|
||||||
if (!mapAddressBook[dest].destdata.erase(key))
|
if (!mapAddressBook[dest].destdata.erase(key))
|
||||||
return false;
|
return false;
|
||||||
return WalletBatch(*database).EraseDestData(EncodeDestination(dest), key);
|
return batch.EraseDestData(EncodeDestination(dest), key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CWallet::LoadDestData(const CTxDestination &dest, const std::string &key, const std::string &value)
|
void CWallet::LoadDestData(const CTxDestination &dest, const std::string &key, const std::string &value)
|
||||||
|
|
|
@ -795,7 +795,7 @@ public:
|
||||||
// Whether this or any UTXO with the same CTxDestination has been spent.
|
// Whether this or any UTXO with the same CTxDestination has been spent.
|
||||||
bool IsUsedDestination(const CTxDestination& dst) const;
|
bool IsUsedDestination(const CTxDestination& dst) const;
|
||||||
bool IsUsedDestination(const uint256& hash, unsigned int n) const;
|
bool IsUsedDestination(const uint256& hash, unsigned int n) const;
|
||||||
void SetUsedDestinationState(const uint256& hash, unsigned int n, bool used) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
void SetUsedDestinationState(WalletBatch& batch, const uint256& hash, unsigned int n, bool used) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
|
|
||||||
std::vector<OutputGroup> GroupOutputs(const std::vector<COutput>& outputs, bool single_coin) const;
|
std::vector<OutputGroup> GroupOutputs(const std::vector<COutput>& outputs, bool single_coin) const;
|
||||||
|
|
||||||
|
@ -820,9 +820,9 @@ public:
|
||||||
bool LoadMinVersion(int nVersion) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; }
|
bool LoadMinVersion(int nVersion) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet) { AssertLockHeld(cs_wallet); nWalletVersion = nVersion; nWalletMaxVersion = std::max(nWalletMaxVersion, nVersion); return true; }
|
||||||
|
|
||||||
//! Adds a destination data tuple to the store, and saves it to disk
|
//! Adds a destination data tuple to the store, and saves it to disk
|
||||||
bool AddDestData(const CTxDestination& dest, const std::string& key, const std::string& value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool AddDestData(WalletBatch& batch, const CTxDestination& dest, const std::string& key, const std::string& value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
//! Erases a destination data tuple in the store and on disk
|
//! Erases a destination data tuple in the store and on disk
|
||||||
bool EraseDestData(const CTxDestination& dest, const std::string& key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
bool EraseDestData(WalletBatch& batch, const CTxDestination& dest, const std::string& key) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
//! Adds a destination data tuple to the store, without saving it to disk
|
//! Adds a destination data tuple to the store, without saving it to disk
|
||||||
void LoadDestData(const CTxDestination& dest, const std::string& key, const std::string& value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
void LoadDestData(const CTxDestination& dest, const std::string& key, const std::string& value) EXCLUSIVE_LOCKS_REQUIRED(cs_wallet);
|
||||||
//! Look up a destination data tuple in the store, return true if found false otherwise
|
//! Look up a destination data tuple in the store, return true if found false otherwise
|
||||||
|
|
Loading…
Add table
Reference in a new issue