60 result.
tx = wtx.GetTx();
62 for (
const auto& txin : result.
tx->vin) {
68 for (
const auto& txout : result.
tx->vout) {
79 result.
time = wtx.GetTxTime();
80 result.
from = wtx.m_from;
89WalletTxStatus MakeWalletTxStatus(
const CWallet& wallet,
const CWalletTx& wtx)
94 WalletTxStatus result;
98 std::numeric_limits<int>::max();
102 result.
lock_time = wtx.GetTx()->nLockTime;
111WalletTxOut MakeWalletTxOut(
const CWallet& wallet,
117 result.
txout = wtx.GetTx()->vout[n];
118 result.
time = wtx.GetTxTime();
124WalletTxOut MakeWalletTxOut(
const CWallet& wallet,
128 result.
txout = output.txout;
129 result.
time = output.time;
135class WalletImpl :
public Wallet
138 explicit WalletImpl(WalletContext& context,
const std::shared_ptr<CWallet>& wallet) : m_context(context), m_wallet(wallet) {}
140 bool encryptWallet(
const SecureString& wallet_passphrase)
override
142 return m_wallet->EncryptWallet(wallet_passphrase);
144 bool isCrypted()
override {
return m_wallet->HasEncryptionKeys(); }
145 bool lock()
override {
return m_wallet->Lock(); }
146 bool unlock(
const SecureString& wallet_passphrase)
override {
return m_wallet->Unlock(wallet_passphrase); }
147 bool isLocked()
override {
return m_wallet->IsLocked(); }
148 bool changeWalletPassphrase(
const SecureString& old_wallet_passphrase,
151 return m_wallet->ChangeWalletPassphrase(old_wallet_passphrase, new_wallet_passphrase);
153 void abortRescan()
override { m_wallet->AbortRescan(); }
154 bool backupWallet(
const std::string& filename)
override {
return m_wallet->BackupWallet(filename); }
155 std::string getWalletName()
override {
return m_wallet->GetName(); }
158 LOCK(m_wallet->cs_wallet);
159 return m_wallet->GetNewDestination(type, label);
161 bool getPubKey(
const CScript& script,
const CKeyID& address, CPubKey& pub_key)
override
163 std::unique_ptr<SigningProvider>
provider = m_wallet->GetSolvingProvider(script);
165 return provider->GetPubKey(address, pub_key);
169 SigningResult signMessage(
const std::string& message,
const PKHash& pkhash, std::string& str_sig)
override
171 return m_wallet->SignMessage(message, pkhash, str_sig);
175 LOCK(m_wallet->cs_wallet);
176 return m_wallet->IsMine(dest);
178 bool setAddressBook(
const CTxDestination& dest,
const std::string& name,
const std::optional<AddressPurpose>& purpose)
override
180 return m_wallet->SetAddressBook(dest, name, purpose);
184 return m_wallet->DelAddressBook(dest);
190 LOCK(m_wallet->cs_wallet);
191 const auto& entry = m_wallet->FindAddressBookEntry(dest,
false);
192 if (!entry)
return false;
194 *name = entry->GetLabel();
202 std::vector<WalletAddress> getAddresses()
override
204 LOCK(m_wallet->cs_wallet);
205 std::vector<WalletAddress> result;
206 m_wallet->ForEachAddrBookEntry([&](
const CTxDestination& dest,
const std::string& label,
bool is_change,
const std::optional<AddressPurpose>& purpose)
EXCLUSIVE_LOCKS_REQUIRED(m_wallet->cs_wallet) {
207 if (is_change) return;
208 bool is_mine = m_wallet->IsMine(dest);
210 result.emplace_back(dest, is_mine, purpose.value_or(is_mine ? AddressPurpose::RECEIVE : AddressPurpose::SEND), label);
214 std::vector<std::string> getAddressReceiveRequests()
override {
215 LOCK(m_wallet->cs_wallet);
216 return m_wallet->GetAddressReceiveRequests();
218 bool setAddressReceiveRequest(
const CTxDestination& dest,
const std::string&
id,
const std::string& value)
override {
231 LOCK(m_wallet->cs_wallet);
232 WalletBatch batch{m_wallet->GetDatabase()};
233 return value.empty() ? m_wallet->EraseAddressReceiveRequest(batch, dest,
id)
234 : m_wallet->SetAddressReceiveRequest(batch, dest,
id, value);
236 util::Result<void> displayAddress(
const CTxDestination& dest)
override
238 LOCK(m_wallet->cs_wallet);
239 return m_wallet->DisplayAddress(dest);
241 bool lockCoin(
const COutPoint& output,
const bool write_to_db)
override
243 LOCK(m_wallet->cs_wallet);
244 return m_wallet->LockCoin(output, write_to_db);
246 bool unlockCoin(
const COutPoint& output)
override
248 LOCK(m_wallet->cs_wallet);
249 return m_wallet->UnlockCoin(output);
251 bool isLockedCoin(
const COutPoint& output)
override
253 LOCK(m_wallet->cs_wallet);
254 return m_wallet->IsLockedCoin(output);
256 void listLockedCoins(std::vector<COutPoint>& outputs)
override
258 LOCK(m_wallet->cs_wallet);
259 return m_wallet->ListLockedCoins(outputs);
261 util::Result<wallet::CreatedTransactionResult> createTransaction(
const std::vector<CRecipient>& recipients,
262 const CCoinControl& coin_control,
264 std::optional<unsigned int> change_pos)
override
266 LOCK(m_wallet->cs_wallet);
269 void commitTransaction(
CTransactionRef tx,
const std::vector<std::string>& messages)
override
271 LOCK(m_wallet->cs_wallet);
272 m_wallet->CommitTransaction(std::move(tx), std::nullopt, std::nullopt, std::nullopt, messages);
274 bool transactionCanBeAbandoned(
const Txid& txid)
override {
return m_wallet->TransactionCanBeAbandoned(txid); }
275 bool abandonTransaction(
const Txid& txid)
override
277 LOCK(m_wallet->cs_wallet);
278 return m_wallet->AbandonTransaction(txid);
280 bool transactionCanBeBumped(
const Txid& txid)
override
284 bool createBumpTransaction(
const Txid& txid,
285 const CCoinControl& coin_control,
286 std::vector<bilingual_str>& errors,
289 CMutableTransaction& mtx)
override
291 std::vector<CTxOut> outputs;
295 bool commitBumpTransaction(
const Txid& txid,
296 CMutableTransaction&& mtx,
297 std::vector<bilingual_str>& errors,
298 Txid& bumped_txid)
override
305 LOCK(m_wallet->cs_wallet);
306 auto mi = m_wallet->mapWallet.find(txid);
307 if (mi != m_wallet->mapWallet.end()) {
308 return mi->second.GetTx();
312 WalletTx getWalletTx(
const Txid& txid)
override
314 LOCK(m_wallet->cs_wallet);
315 auto mi = m_wallet->mapWallet.find(txid);
316 if (mi != m_wallet->mapWallet.end()) {
317 return MakeWalletTx(*m_wallet, mi->second);
321 std::set<WalletTx> getWalletTxs()
override
323 LOCK(m_wallet->cs_wallet);
324 std::set<WalletTx> result;
325 for (
const auto& entry : m_wallet->mapWallet) {
326 result.emplace(MakeWalletTx(*m_wallet, entry.second));
330 bool tryGetTxStatus(
const Txid& txid,
331 interfaces::WalletTxStatus& tx_status,
333 int64_t& block_time)
override
335 TRY_LOCK(m_wallet->cs_wallet, locked_wallet);
336 if (!locked_wallet) {
339 auto mi = m_wallet->mapWallet.find(txid);
340 if (mi == m_wallet->mapWallet.end()) {
343 num_blocks = m_wallet->GetLastBlockHeight();
345 CHECK_NONFATAL(m_wallet->chain().findBlock(m_wallet->GetLastBlockHash(), FoundBlock().time(block_time)));
346 tx_status = MakeWalletTxStatus(*m_wallet, mi->second);
349 WalletTx getWalletTxDetails(
const Txid& txid,
350 WalletTxStatus& tx_status,
351 std::vector<std::string>& messages,
352 std::vector<std::string>& payment_requests,
354 int& num_blocks)
override
356 LOCK(m_wallet->cs_wallet);
357 auto mi = m_wallet->mapWallet.find(txid);
358 if (mi != m_wallet->mapWallet.end()) {
359 num_blocks = m_wallet->GetLastBlockHeight();
360 in_mempool = mi->second.InMempool();
362 payment_requests = mi->second.m_payment_requests;
363 tx_status = MakeWalletTxStatus(*m_wallet, mi->second);
364 return MakeWalletTx(*m_wallet, mi->second);
368 std::optional<PSBTError> fillPSBT(
const common::PSBTFillOptions& options,
370 PartiallySignedTransaction& psbtx,
371 bool& complete)
override
373 return m_wallet->FillPSBT(psbtx, options, complete, n_signed);
375 WalletBalances getBalances()
override
378 WalletBalances result;
379 result.
balance = bal.m_mine_trusted;
386 bool tryGetBalances(WalletBalances& balances, uint256& block_hash)
override
388 TRY_LOCK(m_wallet->cs_wallet, locked_wallet);
389 if (!locked_wallet) {
392 block_hash = m_wallet->GetLastBlockHash();
393 balances = getBalances();
397 CAmount getAvailableBalance(
const CCoinControl& coin_control)
override
399 LOCK(m_wallet->cs_wallet);
403 FastRandomContext
rng{};
404 CoinSelectionParams params(
rng);
407 total_amount += res->GetTotalAmount();
418 bool txinIsMine(
const CTxIn& txin)
override
420 LOCK(m_wallet->cs_wallet);
423 bool txoutIsMine(
const CTxOut& txout)
override
425 LOCK(m_wallet->cs_wallet);
426 return m_wallet->IsMine(txout);
428 CAmount getDebit(
const CTxIn& txin)
override
430 LOCK(m_wallet->cs_wallet);
431 return m_wallet->GetDebit(txin);
433 CAmount getCredit(
const CTxOut& txout)
override
435 LOCK(m_wallet->cs_wallet);
438 CoinsList listCoins()
override
440 LOCK(m_wallet->cs_wallet);
442 for (
const auto& entry :
ListCoins(*m_wallet)) {
443 auto&
group = result[entry.first];
444 for (
const auto& coin : entry.second) {
445 group.emplace_back(coin.outpoint,
446 MakeWalletTxOut(*m_wallet, coin));
451 std::vector<WalletTxOut> getCoins(
const std::vector<COutPoint>& outputs)
override
453 LOCK(m_wallet->cs_wallet);
454 std::vector<WalletTxOut> result;
455 result.reserve(outputs.size());
456 for (
const auto& output : outputs) {
457 result.emplace_back();
458 auto it = m_wallet->mapWallet.find(output.
hash);
459 if (it != m_wallet->mapWallet.end()) {
460 int depth = m_wallet->GetTxDepthInMainChain(it->second);
462 result.back() = MakeWalletTxOut(*m_wallet, it->second, output.
n, depth);
468 CAmount getRequiredFee(
unsigned int tx_bytes)
override {
return GetRequiredFee(*m_wallet, tx_bytes); }
469 CAmount getMinimumFee(
unsigned int tx_bytes,
470 const CCoinControl& coin_control,
471 std::optional<int>* returned_target,
476 if (returned_target) *returned_target = min_fee_rate.returned_target;
477 if (reason) *reason = min_fee_rate.fee_reason;
480 unsigned int getConfirmTarget()
override {
return m_wallet->m_confirm_target; }
481 bool hdEnabled()
override {
return m_wallet->IsHDEnabled(); }
482 bool canGetAddresses()
override {
return m_wallet->CanGetAddresses(); }
485 bool taprootEnabled()
override {
487 return spk_man !=
nullptr;
489 OutputType getDefaultAddressType()
override {
return m_wallet->m_default_address_type; }
490 CAmount getDefaultMaxTxFee()
override {
return m_wallet->m_default_max_tx_fee; }
491 void remove()
override
495 std::unique_ptr<Handler> handleUnload(UnloadFn fn)
override
499 std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn)
override
503 std::unique_ptr<Handler> handleStatusChanged(StatusChangedFn fn)
override
505 return MakeSignalHandler(m_wallet->NotifyStatusChanged.connect([fn](CWallet*) { fn(); }));
507 std::unique_ptr<Handler> handleAddressBookChanged(AddressBookChangedFn fn)
override
510 [fn](
const CTxDestination& address,
const std::string& label,
bool is_mine,
513 std::unique_ptr<Handler> handleTransactionChanged(TransactionChangedFn fn)
override
516 [fn](
const Txid& txid,
ChangeType status) { fn(txid, status); }));
518 std::unique_ptr<Handler> handleCanGetAddressesChanged(CanGetAddressesChangedFn fn)
override
522 CWallet* wallet()
override {
return m_wallet.get(); }
524 util::Result<std::string> exportWatchOnlyWallet(
const fs::path& destination)
override {
525 LOCK(m_wallet->cs_wallet);
526 m_wallet->TopUpKeyPool();
530 WalletContext& m_context;
531 std::shared_ptr<CWallet> m_wallet;
534class WalletLoaderImpl :
public WalletLoader
537 WalletLoaderImpl(Chain& chain, ArgsManager&
args)
539 m_context.chain = &chain;
540 m_context.args = &
args;
542 ~WalletLoaderImpl()
override { stop(); }
545 void registerRpcs()
override
548 m_rpc_commands.emplace_back(
command.category,
command.name, [
this, &
command](
const JSONRPCRequest&
request, UniValue& result,
bool last_handler) {
549 JSONRPCRequest wallet_request = request;
550 wallet_request.context = &m_context;
551 return command.actor(wallet_request, result, last_handler);
553 m_rpc_commands.back().metadata_fn =
command.metadata_fn;
554 m_rpc_handlers.emplace_back(m_context.chain->handleRpc(m_rpc_commands.back()));
558 bool load()
override {
return LoadWallets(m_context); }
559 void start(CScheduler& scheduler)
override
561 m_context.scheduler = &scheduler;
565 void setMockTime(int64_t time)
override {
return SetMockTime(std::chrono::seconds{time}); }
566 void schedulerMockForward(std::chrono::seconds delta)
override {
Assert(m_context.scheduler)->MockForward(delta); }
569 util::Result<std::unique_ptr<Wallet>> createWallet(
const std::string& name,
const SecureString& passphrase, uint64_t wallet_creation_flags, std::vector<bilingual_str>& warnings)
override
571 DatabaseOptions options;
578 std::unique_ptr<Wallet> wallet{
MakeWallet(m_context,
CreateWallet(m_context, name,
true, options, status, error, warnings))};
582 return util::Error{error};
585 util::Result<std::unique_ptr<Wallet>> loadWallet(
const std::string& name, std::vector<bilingual_str>& warnings)
override
587 DatabaseOptions options;
592 std::unique_ptr<Wallet> wallet{
MakeWallet(m_context,
LoadWallet(m_context, name,
true, options, status, error, warnings))};
596 return util::Error{error};
599 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)
override
603 std::unique_ptr<Wallet> wallet{
MakeWallet(m_context,
RestoreWallet(m_context, backup_file, wallet_name,
true, status, error, warnings, load_after_restore))};
604 if (!error.
empty()) {
605 return util::Error{error};
609 util::Result<WalletMigrationResult> migrateWallet(
const std::string& name,
const SecureString& passphrase,
bool load_wallet)
override
613 WalletMigrationResult
out{
615 .watchonly_wallet_name = res->watchonly_wallet_name,
616 .solvables_wallet_name = res->solvables_wallet_name,
617 .backup_path = res->backup_path,
621 bool isEncrypted(
const std::string& wallet_name)
override
624 auto it = std::find_if(wallets.begin(), wallets.end(), [&](std::shared_ptr<CWallet> w){ return w->GetName() == wallet_name; });
625 if (it != wallets.end())
return (*it)->HasEncryptionKeys();
628 DatabaseOptions options;
637 if (!
db)
return false;
640 std::string getWalletDir()
override
644 std::vector<std::pair<std::string, std::string>> listWalletDir()
override
646 std::vector<std::pair<std::string, std::string>> paths;
648 paths.emplace_back(fs::PathToString(path), format);
652 std::vector<std::unique_ptr<Wallet>> getWallets()
override
654 std::vector<std::unique_ptr<Wallet>> wallets;
655 for (
const auto& wallet :
GetWallets(m_context)) {
656 wallets.emplace_back(
MakeWallet(m_context, wallet));
660 std::unique_ptr<Handler> handleLoadWallet(
LoadWalletFn fn)
override
664 WalletContext* context()
override {
return &m_context; }
666 WalletContext m_context;
667 const std::vector<std::string> m_wallet_filenames;
668 std::vector<std::unique_ptr<Handler>> m_rpc_handlers;
669 std::list<CRPCCommand> m_rpc_commands;
679 return std::make_unique<wallet::WalletLoaderImpl>(chain,
args);
bool ExtractDestination(const CScript &scriptPubKey, CTxDestination &addressRet)
Parse a scriptPubKey for the destination.
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).
#define CHECK_NONFATAL(condition)
Identity function.
#define Assert(val)
Identity function.
bool HasSelected() const
Returns true if there are pre-selected inputs.
bool m_allow_other_inputs
int GetTxDepthInMainChain(const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Return depth of transaction in blockchain: <0 : conflicts with a transaction this deep in the blockch...
int GetTxBlocksToMaturity(const CWalletTx &wtx) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
RecursiveMutex cs_wallet
Main wallet lock.
Interface for accessing a wallet.
A CWallet maintains a set of transactions and balances, and provides the ability to create new transa...
A transaction with a bunch of additional info that only the owner cares about.
WalletBatch(WalletDatabase &database)
bool IsSpent(const COutPoint &outpoint) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
Outpoint is spent if any non-conflicted transaction spends it:
bool IsMine(const CTxDestination &dest) const EXCLUSIVE_LOCKS_REQUIRED(cs_wallet)
const std::string request
std::unique_ptr< WalletLoader > MakeWalletLoader(Chain &chain, ArgsManager &args)
std::unique_ptr< Handler > MakeSignalHandler(btcsignals::connection connection)
Return handler wrapping a btcsignals connection.
std::unique_ptr< Wallet > MakeWallet(wallet::WalletContext &context, const std::shared_ptr< wallet::CWallet > &wallet)
bilingual_str ErrorString(const Result< T > &result)
Result CreateRateBumpTransaction(CWallet &wallet, const Txid &txid, const CCoinControl &coin_control, std::vector< bilingual_str > &errors, CAmount &old_fee, CAmount &new_fee, CMutableTransaction &mtx, bool require_mine, const std::vector< CTxOut > &outputs, std::optional< uint32_t > original_change_index)
Create bumpfee transaction based on feerate estimates.
bool TransactionCanBeBumped(const CWallet &wallet, const Txid &txid)
Return whether transaction can be bumped.
bool SignTransaction(CWallet &wallet, CMutableTransaction &mtx)
Result CommitTransaction(CWallet &wallet, const Txid &txid, CMutableTransaction &&mtx, std::vector< bilingual_str > &errors, Txid &bumped_txid)
void StartWallets(WalletContext &context)
Complete startup of wallets.
bool OutputIsChange(const CWallet &wallet, const CTxOut &txout)
void ReadDatabaseArgs(const ArgsManager &args, DatabaseOptions &options)
std::shared_ptr< CWallet > LoadWallet(WalletContext &context, const std::string &name, std::optional< bool > load_on_start, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
util::Result< CreatedTransactionResult > CreateTransaction(CWallet &wallet, const std::vector< CRecipient > &vecSend, std::optional< unsigned int > change_pos, const CCoinControl &coin_control, bool sign)
Create a new transaction paying the recipients with a set of coins selected by SelectCoins(); Also cr...
std::vector< std::shared_ptr< CWallet > > GetWallets(WalletContext &context)
util::Result< MigrationResult > MigrateLegacyToDescriptor(const std::string &wallet_name, const SecureString &passphrase, WalletContext &context, bool load_wallet)
Do all steps to migrate a legacy wallet to a descriptor wallet.
util::Result< CoinsResult > FetchSelectedInputs(const CWallet &wallet, const CCoinControl &coin_control, const CoinSelectionParams &coin_selection_params)
Fetch and validate coin control selected inputs.
bool CachedTxIsTrusted(const CWallet &wallet, const CWalletTx &wtx, std::set< Txid > &trusted_parents)
MinimumFeeRateResult GetMinimumFeeRate(const CWallet &wallet, const CCoinControl &coin_control)
Estimate the minimum fee rate considering user set parameters and the required fee.
CAmount GetMinimumFee(const MinimumFeeRateResult &min_fee_rate, unsigned int nTxBytes)
Return the minimum fee for this size given a fee rate result.
bool VerifyWallets(WalletContext &context)
Responsible for reading and validating the -wallet arguments and verifying the wallet database.
std::unique_ptr< interfaces::Handler > HandleLoadWallet(WalletContext &context, LoadWalletFn load_wallet)
fs::path GetWalletDir()
Get the path of the wallet directory.
std::unique_ptr< WalletDatabase > MakeWalletDatabase(const std::string &name, const DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error_string)
std::map< CTxDestination, std::vector< COutput > > ListCoins(const CWallet &wallet)
Return list of available coins and locked coins grouped by non-change output address.
util::Result< std::string > ExportWatchOnlyWallet(const CWallet &wallet, const fs::path &destination, WalletContext &context)
CAmount CachedTxGetDebit(const CWallet &wallet, const CWalletTx &wtx, bool avoid_reuse)
std::shared_ptr< CWallet > RestoreWallet(WalletContext &context, const fs::path &backup_file, const std::string &wallet_name, std::optional< bool > load_on_start, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings, bool load_after_restore, bool allow_unnamed)
CAmount CachedTxGetChange(const CWallet &wallet, const CWalletTx &wtx)
CAmount CachedTxGetCredit(const CWallet &wallet, const CWalletTx &wtx, bool avoid_reuse)
AddressPurpose
Address purpose field that has been been stored with wallet sending and receiving addresses since BIP...
std::function< void(std::unique_ptr< interfaces::Wallet > wallet)> LoadWalletFn
Balance GetBalance(const CWallet &wallet, const int min_depth, bool avoid_reuse, bool include_nonmempool)
void UnloadWallets(WalletContext &context)
std::shared_ptr< CWallet > CreateWallet(WalletContext &context, const std::string &name, std::optional< bool > load_on_start, DatabaseOptions &options, DatabaseStatus &status, bilingual_str &error, std::vector< bilingual_str > &warnings)
bool LoadWallets(WalletContext &context)
Load wallet databases.
@ WALLET_FLAG_EXTERNAL_SIGNER
Indicates that the wallet needs an external signer.
@ WALLET_FLAG_DISABLE_PRIVATE_KEYS
CAmount GetRequiredFee(const CWallet &wallet, unsigned int nTxBytes)
Return the minimum required absolute fee for this size based on the required fee rate.
std::span< const CRPCCommand > GetWalletRPCCommands()
bool InputIsMine(const CWallet &wallet, const CTxIn &txin)
CTxDestination getNewDestination(CWallet &w, OutputType output_type)
Returns a new destination, of an specific type, from the wallet.
CAmount OutputGetCredit(const CWallet &wallet, const CTxOut &txout)
std::vector< std::pair< fs::path, std::string > > ListDatabases(const fs::path &wallet_dir)
Recursively list database paths in directory.
bool RemoveWallet(WalletContext &context, const std::shared_ptr< CWallet > &wallet, std::optional< bool > load_on_start, std::vector< bilingual_str > &warnings)
CoinsResult AvailableCoins(const CWallet &wallet, const CCoinControl *coinControl, std::optional< CFeeRate > feerate, const CoinFilterParams ¶ms)
Populate the CoinsResult struct with vectors of available COutputs, organized by OutputType.
std::unique_ptr< Handler > MakeSignalHandler(btcsignals::connection connection)
Return handler wrapping a btcsignals connection.
std::shared_ptr< const CTransaction > CTransactionRef
std::basic_string< char, std::char_traits< char >, secure_allocator< char > > SecureString
SecureString create_passphrase
std::optional< DatabaseFormat > require_format
Information about one wallet address.
Collection of wallet balances.
CAmount nonmempool_balance
CAmount unconfirmed_balance
std::vector< bool > txin_is_mine
std::optional< std::string > comment
std::vector< CTxDestination > txout_address
std::vector< bool > txout_address_is_mine
std::optional< std::string > comment_to
std::vector< bool > txout_is_change
std::vector< bool > txout_is_mine
std::optional< std::string > message
std::optional< std::string > from
Wallet transaction output.
Updated transaction status.
unsigned int time_received
CAmount m_mine_trusted
Trusted, at depth=GetBalance.min_depth or more.
A UTXO under consideration for use in funding a new transaction.
CAmount GetTotalAmount() const
State of rejected transaction that conflicts with a confirmed block.
int conflicting_block_height
State of transaction confirmed in a block.
int confirmed_block_height
#define TRY_LOCK(cs, name)
#define AssertLockHeld(cs)
FuzzedDataProvider provider
#define EXCLUSIVE_LOCKS_REQUIRED(...)
transaction_identifier< false > Txid
Txid commits to all transaction fields except the witness.
ChangeType
General change type (added, updated, removed).
void SetMockTime(std::chrono::time_point< NodeClock, std::chrono::seconds > mock)