diff options
author | glozow <gloriajzhao@gmail.com> | 2023-08-23 15:35:26 +0100 |
---|---|---|
committer | glozow <gloriajzhao@gmail.com> | 2023-09-13 16:14:17 +0100 |
commit | 3f01a3dab1c4ee37fd4093b6a0a3b622f53e231d (patch) | |
tree | 04ce2605c1053305c307bf74bb3f16dec56bf2f5 /src/txmempool.h | |
parent | 7d7f7a1189432b1b6245ba25df572229870567cb (diff) |
[CCoinsViewMemPool] track non-base coins and allow Reset
Temporary coins should not be available in separate subpackage submissions.
Any mempool coins that are cached in m_view should be removed whenever
mempool contents change, as they may be spent or no longer exist.
Diffstat (limited to 'src/txmempool.h')
-rw-r--r-- | src/txmempool.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/txmempool.h b/src/txmempool.h index a1867eb895..4e68b711a2 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -839,15 +839,27 @@ class CCoinsViewMemPool : public CCoinsViewBacked * validation, since we can access transaction outputs without submitting them to mempool. */ std::unordered_map<COutPoint, Coin, SaltedOutpointHasher> m_temp_added; + + /** + * Set of all coins that have been fetched from mempool or created using PackageAddTransaction + * (not base). Used to track the origin of a coin, see GetNonBaseCoins(). + */ + mutable std::unordered_set<COutPoint, SaltedOutpointHasher> m_non_base_coins; protected: const CTxMemPool& mempool; public: CCoinsViewMemPool(CCoinsView* baseIn, const CTxMemPool& mempoolIn); + /** GetCoin, returning whether it exists and is not spent. Also updates m_non_base_coins if the + * coin is not fetched from base. */ bool GetCoin(const COutPoint &outpoint, Coin &coin) const override; /** Add the coins created by this transaction. These coins are only temporarily stored in * m_temp_added and cannot be flushed to the back end. Only used for package validation. */ void PackageAddTransaction(const CTransactionRef& tx); + /** Get all coins in m_non_base_coins. */ + std::unordered_set<COutPoint, SaltedOutpointHasher> GetNonBaseCoins() const { return m_non_base_coins; } + /** Clear m_temp_added and m_non_base_coins. */ + void Reset(); }; /** |