5#ifndef BITCOIN_INTERFACES_WALLET_H
6#define BITCOIN_INTERFACES_WALLET_H
149 std::optional<unsigned int> change_pos) = 0;
168 std::vector<bilingual_str>& errors,
179 std::vector<bilingual_str>& errors,
180 Txid& bumped_txid) = 0;
195 int64_t& block_time) = 0;
202 int& num_blocks) = 0;
205 virtual std::optional<common::PSBTError>
fillPSBT(std::optional<int> sighash_type,
238 using CoinsList = std::map<CTxDestination, std::vector<std::tuple<COutPoint, WalletTxOut>>>;
242 virtual std::vector<WalletTxOut>
getCoins(
const std::vector<COutPoint>& outputs) = 0;
250 int* returned_target,
285 using ShowProgressFn = std::function<void(
const std::string& title,
int progress)>;
294 const std::string& label,
337 virtual std::vector<std::pair<std::string, std::string>>
listWalletDir() = 0;
340 virtual std::vector<std::unique_ptr<Wallet>>
getWallets() = 0;
std::variant< CNoDestination, PubKeyDestination, PKHash, ScriptHash, WitnessV0ScriptHash, WitnessV0KeyHash, WitnessV1Taproot, PayToAnchor, WitnessUnknown > CTxDestination
A txout script categorized into standard templates.
int64_t CAmount
Amount in satoshis (Can be negative).
Fee rate in satoshis per virtualbyte: CAmount / vB the feerate is represented internally as FeeFrac.
An encapsulated private key.
A reference to a CKey: the Hash160 of its serialized public key.
An outpoint - a combination of a transaction hash and an index n into its vout.
An encapsulated public key.
Serialized script, used inside transaction inputs and outputs.
An input of a transaction.
An output of a transaction.
Interface for accessing a wallet.
virtual std::unique_ptr< Handler > handleShowProgress(ShowProgressFn fn)=0
virtual bool unlockCoin(const COutPoint &output)=0
Unlock coin.
virtual CoinsList listCoins()=0
virtual bool getAddress(const CTxDestination &dest, std::string *name, wallet::AddressPurpose *purpose)=0
Look up address in wallet, return whether exists.
virtual bool txinIsMine(const CTxIn &txin)=0
Return whether transaction input belongs to wallet.
virtual bool getPubKey(const CScript &script, const CKeyID &address, CPubKey &pub_key)=0
Get public key.
virtual std::vector< WalletAddress > getAddresses()=0
Get wallet address list.
std::function< void(const std::string &title, int progress)> ShowProgressFn
Register handler for show progress messages.
virtual bool encryptWallet(const SecureString &wallet_passphrase)=0
Encrypt wallet.
virtual std::unique_ptr< Handler > handleStatusChanged(StatusChangedFn fn)=0
virtual bool abandonTransaction(const Txid &txid)=0
Abandon transaction.
virtual std::vector< WalletTxOut > getCoins(const std::vector< COutPoint > &outputs)=0
Return wallet transaction output information.
std::function< void()> UnloadFn
Register handler for unload message.
virtual bool isLocked()=0
Return whether wallet is locked.
virtual std::unique_ptr< Handler > handleAddressBookChanged(AddressBookChangedFn fn)=0
virtual std::unique_ptr< Handler > handleCanGetAddressesChanged(CanGetAddressesChangedFn fn)=0
virtual WalletTx getWalletTx(const Txid &txid)=0
Get transaction information.
virtual bool transactionCanBeAbandoned(const Txid &txid)=0
Return whether transaction can be abandoned.
virtual CAmount getAvailableBalance(const wallet::CCoinControl &coin_control)=0
Get available balance.
virtual std::set< WalletTx > getWalletTxs()=0
Get list of all wallet transactions.
virtual CAmount getRequiredFee(unsigned int tx_bytes)=0
Get required fee.
virtual bool setAddressBook(const CTxDestination &dest, const std::string &name, const std::optional< wallet::AddressPurpose > &purpose)=0
Add or update address.
virtual wallet::CWallet * wallet()
Return pointer to internal wallet class, useful for testing.
virtual void abortRescan()=0
Abort a rescan.
std::function< void(const Txid &txid, ChangeType status)> TransactionChangedFn
Register handler for transaction changed messages.
virtual std::optional< common::PSBTError > fillPSBT(std::optional< int > sighash_type, bool sign, bool bip32derivs, size_t *n_signed, PartiallySignedTransaction &psbtx, bool &complete)=0
Fill PSBT.
virtual unsigned int getConfirmTarget()=0
Get tx confirm target.
virtual bool unlock(const SecureString &wallet_passphrase)=0
Unlock wallet.
virtual bool changeWalletPassphrase(const SecureString &old_wallet_passphrase, const SecureString &new_wallet_passphrase)=0
Change wallet passphrase.
virtual std::string getWalletName()=0
Get wallet name.
virtual bool hasExternalSigner()=0
virtual bool tryGetBalances(WalletBalances &balances, uint256 &block_hash)=0
Get balances if possible without blocking.
virtual CAmount getDefaultMaxTxFee()=0
Get max tx fee.
virtual bool isSpendable(const CTxDestination &dest)=0
Return whether wallet has private key.
virtual CAmount getBalance()=0
Get balance.
virtual CAmount getDebit(const CTxIn &txin)=0
Return debit amount if transaction input belongs to wallet.
virtual bool hdEnabled()=0
virtual bool isLockedCoin(const COutPoint &output)=0
Return whether coin is locked.
virtual bool signBumpTransaction(CMutableTransaction &mtx)=0
Sign bump transaction.
virtual WalletBalances getBalances()=0
Get balances.
virtual OutputType getDefaultAddressType()=0
virtual CAmount getCredit(const CTxOut &txout)=0
Return credit amount if transaction input belongs to wallet.
virtual bool backupWallet(const std::string &filename)=0
Back up wallet.
virtual void commitTransaction(CTransactionRef tx, WalletValueMap value_map, WalletOrderForm order_form)=0
Commit transaction.
virtual bool createBumpTransaction(const Txid &txid, const wallet::CCoinControl &coin_control, std::vector< bilingual_str > &errors, CAmount &old_fee, CAmount &new_fee, CMutableTransaction &mtx)=0
Create bump transaction.
virtual std::unique_ptr< Handler > handleTransactionChanged(TransactionChangedFn fn)=0
virtual void listLockedCoins(std::vector< COutPoint > &outputs)=0
List locked coins.
virtual CTransactionRef getTx(const Txid &txid)=0
Get a transaction.
std::function< void(const CTxDestination &address, const std::string &label, bool is_mine, wallet::AddressPurpose purpose, ChangeType status)> AddressBookChangedFn
Register handler for address book changed messages.
virtual util::Result< CTxDestination > getNewDestination(OutputType type, const std::string &label)=0
virtual std::unique_ptr< Handler > handleUnload(UnloadFn fn)=0
virtual ~Wallet()=default
virtual bool delAddressBook(const CTxDestination &dest)=0
virtual bool transactionCanBeBumped(const Txid &txid)=0
Return whether transaction can be bumped.
virtual util::Result< wallet::CreatedTransactionResult > createTransaction(const std::vector< wallet::CRecipient > &recipients, const wallet::CCoinControl &coin_control, bool sign, std::optional< unsigned int > change_pos)=0
Create transaction.
std::function< void()> StatusChangedFn
Register handler for status changed messages.
std::map< CTxDestination, std::vector< std::tuple< COutPoint, WalletTxOut > > > CoinsList
virtual bool lockCoin(const COutPoint &output, bool write_to_db)=0
Lock coin.
virtual util::Result< void > displayAddress(const CTxDestination &dest)=0
Display address on external signer.
virtual WalletTx getWalletTxDetails(const Txid &txid, WalletTxStatus &tx_status, WalletOrderForm &order_form, bool &in_mempool, int &num_blocks)=0
Get transaction details.
virtual bool setAddressReceiveRequest(const CTxDestination &dest, const std::string &id, const std::string &value)=0
Save or remove receive request.
virtual bool taprootEnabled()=0
virtual bool tryGetTxStatus(const Txid &txid, WalletTxStatus &tx_status, int &num_blocks, int64_t &block_time)=0
Try to get updated status for a particular transaction, if possible without blocking.
virtual bool txoutIsMine(const CTxOut &txout)=0
Return whether transaction output belongs to wallet.
virtual SigningResult signMessage(const std::string &message, const PKHash &pkhash, std::string &str_sig)=0
Sign message.
virtual bool privateKeysDisabled()=0
virtual bool lock()=0
Lock wallet.
std::function< void()> CanGetAddressesChangedFn
Register handler for keypool changed messages.
virtual CAmount getMinimumFee(unsigned int tx_bytes, const wallet::CCoinControl &coin_control, int *returned_target, FeeReason *reason)=0
Get minimum fee.
virtual std::vector< std::string > getAddressReceiveRequests()=0
Get receive requests.
virtual bool canGetAddresses()=0
virtual bool isCrypted()=0
Return whether wallet is encrypted.
virtual bool commitBumpTransaction(const Txid &txid, CMutableTransaction &&mtx, std::vector< bilingual_str > &errors, Txid &bumped_txid)=0
Commit bump transaction.
virtual util::Result< std::unique_ptr< Wallet > > restoreWallet(const fs::path &backup_file, const std::string &wallet_name, std::vector< bilingual_str > &warnings, bool load_after_restore)=0
Restore backup wallet.
virtual util::Result< std::unique_ptr< Wallet > > createWallet(const std::string &name, const SecureString &passphrase, uint64_t wallet_creation_flags, std::vector< bilingual_str > &warnings)=0
Create new wallet.
virtual std::string getWalletDir()=0
Return default wallet directory.
virtual std::vector< std::unique_ptr< Wallet > > getWallets()=0
Return interfaces for accessing wallets (if any).
virtual util::Result< WalletMigrationResult > migrateWallet(const std::string &name, const SecureString &passphrase)=0
Migrate a wallet.
virtual wallet::WalletContext * context()
Return pointer to internal context, useful for testing.
virtual std::vector< std::pair< std::string, std::string > > listWalletDir()=0
Return available wallets in wallet directory.
virtual util::Result< std::unique_ptr< Wallet > > loadWallet(const std::string &name, std::vector< bilingual_str > &warnings)=0
Load existing wallet.
virtual bool isEncrypted(const std::string &wallet_name)=0
Returns true if wallet stores encryption keys.
std::function< void(std::unique_ptr< Wallet > wallet)> LoadWalletFn
virtual std::unique_ptr< Handler > handleLoadWallet(LoadWalletFn fn)=0
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
static int sign(const secp256k1_context *ctx, struct signer_secrets *signer_secrets, struct signer *signer, const secp256k1_musig_keyagg_cache *cache, const unsigned char *msg32, unsigned char *sig64)
std::map< std::string, std::string > WalletValueMap
std::vector< std::pair< std::string, std::string > > WalletOrderForm
std::unique_ptr< WalletLoader > MakeWalletLoader(Chain &chain, ArgsManager &args)
std::unique_ptr< Wallet > MakeWallet(wallet::WalletContext &context, const std::shared_ptr< wallet::CWallet > &wallet)
AddressPurpose
Address purpose field that has been been stored with wallet sending and receiving addresses since BIP...
std::shared_ptr< const CTransaction > CTransactionRef
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
A mutable version of CTransaction.
A version of CTransaction with the PSBT format.
Information about one wallet address.
wallet::AddressPurpose purpose
WalletAddress(CTxDestination dest, bool is_mine, wallet::AddressPurpose purpose, std::string name)
Collection of wallet balances.
CAmount unconfirmed_balance
bool balanceChanged(const WalletBalances &prev) const
std::optional< std::string > watchonly_wallet_name
std::optional< std::string > solvables_wallet_name
std::vector< bool > txin_is_mine
std::vector< CTxDestination > txout_address
std::vector< bool > txout_address_is_mine
std::vector< bool > txout_is_change
std::map< std::string, std::string > value_map
std::vector< bool > txout_is_mine
bool operator<(const WalletTx &a) const
Wallet transaction output.
Updated transaction status.
unsigned int time_received
transaction_identifier< false > Txid
Txid commits to all transaction fields except the witness.
ChangeType
General change type (added, updated, removed).