diff options
author | Andrew Chow <achow101-github@achow101.com> | 2020-02-24 15:09:15 -0500 |
---|---|---|
committer | Andrew Chow <achow101-github@achow101.com> | 2020-03-07 10:13:43 -0500 |
commit | 474ea3b927ddc67e64ae78e08c20c9264817e84d (patch) | |
tree | 9df5a282c1556c87a807c389b811fbc83867bdf5 /src/script/descriptor.h | |
parent | c3b471592346b98ae9aedf7cbc2a4058061b1ad8 (diff) |
Introduce DescriptorCache struct which caches xpubs
Diffstat (limited to 'src/script/descriptor.h')
-rw-r--r-- | src/script/descriptor.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/script/descriptor.h b/src/script/descriptor.h index 58b920c681..5c686d68c1 100644 --- a/src/script/descriptor.h +++ b/src/script/descriptor.h @@ -13,6 +13,49 @@ #include <vector> +using ExtPubKeyMap = std::unordered_map<uint32_t, CExtPubKey>; + +/** Cache for single descriptor's derived extended pubkeys */ +class DescriptorCache { +private: + /** Map key expression index -> map of (key derivation index -> xpub) */ + std::unordered_map<uint32_t, ExtPubKeyMap> m_derived_xpubs; + /** Map key expression index -> parent xpub */ + ExtPubKeyMap m_parent_xpubs; + +public: + /** Cache a parent xpub + * + * @param[in] key_exp_pos Position of the key expression within the descriptor + * @param[in] xpub The CExtPubKey to cache + */ + void CacheParentExtPubKey(uint32_t key_exp_pos, const CExtPubKey& xpub); + /** Retrieve a cached parent xpub + * + * @param[in] key_exp_pos Position of the key expression within the descriptor + * @param[in] xpub The CExtPubKey to get from cache + */ + bool GetCachedParentExtPubKey(uint32_t key_exp_pos, CExtPubKey& xpub) const; + /** Cache an xpub derived at an index + * + * @param[in] key_exp_pos Position of the key expression within the descriptor + * @param[in] der_index Derivation index of the xpub + * @param[in] xpub The CExtPubKey to cache + */ + void CacheDerivedExtPubKey(uint32_t key_exp_pos, uint32_t der_index, const CExtPubKey& xpub); + /** Retrieve a cached xpub derived at an index + * + * @param[in] key_exp_pos Position of the key expression within the descriptor + * @param[in] der_index Derivation index of the xpub + * @param[in] xpub The CExtPubKey to get from cache + */ + bool GetCachedDerivedExtPubKey(uint32_t key_exp_pos, uint32_t der_index, CExtPubKey& xpub) const; + + /** Retrieve all cached parent xpubs */ + const ExtPubKeyMap GetCachedParentExtPubKeys() const; + /** Retrieve all cached derived xpubs */ + const std::unordered_map<uint32_t, ExtPubKeyMap> GetCachedDerivedExtPubKeys() const; +}; /** \brief Interface for parsed descriptor objects. * |