git / moonbite-core / src/wallet/reserve.h · raw
#pragma once#include <outputtype.h>#include <script/standard.h>// Forward Declarationsclass CWallet;class ScriptPubKeyMan;/** A wrapper to reserve an address from a wallet * * ReserveDestination is used to reserve an address. * It is currently only used inside of CreateTransaction. * * Instantiating a ReserveDestination does not reserve an address. To do so, * GetReservedDestination() needs to be called on the object. Once an address has been * reserved, call KeepDestination() on the ReserveDestination object to make sure it is not * returned. Call ReturnDestination() to return the address so it can be re-used (for * example, if the address was used in a new transaction * and that transaction was not completed and needed to be aborted). * * If an address is reserved and KeepDestination() is not called, then the address will be * returned when the ReserveDestination goes out of scope. */class ReserveDestination{protected: //! The wallet to reserve from const CWallet* const pwallet; //! The ScriptPubKeyMan to reserve from. Based on type when GetReservedDestination is called ScriptPubKeyMan* m_spk_man{nullptr}; OutputType const type; //! The index of the address's key in the keypool int64_t nIndex{-1}; //! The destination CTxDestination address; //! Whether this is from the internal (change output) keypool bool fInternal{false};public: //! Construct a ReserveDestination object. This does NOT reserve an address yet explicit ReserveDestination(CWallet* pwallet, OutputType type) : pwallet(pwallet), type(type) {} ReserveDestination(const ReserveDestination&) = delete; ReserveDestination& operator=(const ReserveDestination&) = delete; //! Destructor. If a key has been reserved and not KeepKey'ed, it will be returned to the keypool ~ReserveDestination() { ReturnDestination(); } //! Reserve an address bool GetReservedDestination(CTxDestination& pubkey, bool internal); //! Return reserved address void ReturnDestination(); //! Keep the address. Do not return it's key to the keypool when this object goes out of scope void KeepDestination();};