7#include <blockfilter.h>
9#include <chainparams.h>
64#include <bitcoin-build-config.h>
71#include <boost/signals2/signal.hpp>
90#ifdef ENABLE_EXTERNAL_SIGNER
100class NodeImpl :
public Node
103 explicit NodeImpl(NodeContext& context) { setContext(&context); }
107 int getExitStatus()
override {
return Assert(
m_context)->exit_status.load(); }
109 bool baseInitialize()
override
114 m_context->warnings = std::make_unique<node::Warnings>();
115 m_context->kernel = std::make_unique<kernel::Context>();
116 m_context->ecc_context = std::make_unique<ECC_Context>();
128 m_context->exit_status.store(EXIT_FAILURE);
131 void appShutdown()
override
136 void startShutdown()
override
139 if (!(
Assert(ctx.shutdown_request))()) {
140 LogError(
"Failed to send shutdown signal\n");
144 if (
args().GetBoolArg(
"-server",
false)) {
150 bool isSettingIgnored(
const std::string&
name)
override
152 bool ignored =
false;
155 ignored = !options->empty();
165 settings.rw_settings.erase(name);
167 settings.rw_settings[name] = value;
176 settings.forced_settings.erase(name);
178 settings.forced_settings[name] = value;
182 void resetSettings()
override
190 void mapPort(
bool use_pcp)
override {
StartMapPort(use_pcp); }
196 bool getNodesStats(NodesStats& stats)
override
201 std::vector<CNodeStats> stats_temp;
202 m_context->connman->GetNodeStats(stats_temp);
204 stats.reserve(stats_temp.size());
205 for (
auto& node_stats_temp : stats_temp) {
206 stats.emplace_back(std::move(node_stats_temp),
false,
CNodeStateStats());
213 for (
auto& node_stats : stats) {
214 std::get<1>(node_stats) =
215 m_context->peerman->GetNodeStateStats(std::get<0>(node_stats).nodeid, std::get<2>(node_stats));
223 bool getBanned(
banmap_t& banmap)
override
231 bool ban(
const CNetAddr& net_addr, int64_t ban_time_offset)
override
234 m_context->banman->Ban(net_addr, ban_time_offset);
247 bool disconnectByAddress(
const CNetAddr& net_addr)
override
250 return m_context->connman->DisconnectNode(net_addr);
254 bool disconnectById(
NodeId id)
override
257 return m_context->connman->DisconnectNode(
id);
261 std::vector<std::unique_ptr<interfaces::ExternalSigner>> listExternalSigners()
override
263#ifdef ENABLE_EXTERNAL_SIGNER
264 std::vector<ExternalSigner> signers = {};
268 std::vector<std::unique_ptr<interfaces::ExternalSigner>> result;
269 result.reserve(signers.size());
270 for (
auto&
signer : signers) {
271 result.emplace_back(std::make_unique<ExternalSignerImpl>(std::move(
signer)));
284 int64_t getTotalBytesRecv()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesRecv() : 0; }
285 int64_t getTotalBytesSent()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesSent() : 0; }
286 size_t getMempoolSize()
override {
return m_context->mempool ?
m_context->mempool->size() : 0; }
287 size_t getMempoolDynamicUsage()
override {
return m_context->mempool ?
m_context->mempool->DynamicMemoryUsage() : 0; }
288 size_t getMempoolMaxUsage()
override {
return m_context->mempool ?
m_context->mempool->m_opts.max_size_bytes : 0; }
289 bool getHeaderTip(
int& height, int64_t& block_time)
override
292 auto best_header = chainman().m_best_header;
294 height = best_header->nHeight;
295 block_time = best_header->GetBlockTime();
300 std::map<CNetAddr, LocalServiceInfo> getNetLocalAddresses()
override
303 return m_context->connman->getNetLocalAddresses();
307 int getNumBlocks()
override
310 return chainman().ActiveChain().Height();
312 uint256 getBestBlockHash()
override
315 return tip ? tip->
GetBlockHash() : chainman().GetParams().GenesisBlock().GetHash();
317 int64_t getLastBlockTime()
override
320 if (chainman().ActiveChain().Tip()) {
321 return chainman().ActiveChain().Tip()->GetBlockTime();
323 return chainman().GetParams().GenesisBlock().GetBlockTime();
325 double getVerificationProgress()
override
327 return chainman().GuessVerificationProgress(
WITH_LOCK(chainman().GetMutex(),
return chainman().ActiveChain().Tip()));
329 bool isInitialBlockDownload()
override
331 return chainman().IsInitialBlockDownload();
333 bool isLoadingBlocks()
override {
return chainman().m_blockman.LoadingBlocks(); }
334 void setNetworkActive(
bool active)
override
337 m_context->connman->SetNetworkActive(active);
340 bool getNetworkActive()
override {
return m_context->connman &&
m_context->connman->GetNetworkActive(); }
344 return m_context->mempool->m_opts.dust_relay_feerate;
358 std::optional<Coin> getUnspentOutput(
const COutPoint& output)
override
361 return chainman().ActiveChainstate().CoinsTip().GetCoin(output);
371 std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn)
override
375 std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn)
override
379 std::unique_ptr<Handler> handleQuestion(QuestionFn fn)
override
383 std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn)
override
387 std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn)
override
391 std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn)
override
395 std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn)
override
399 std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn)
override
403 std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn)
override
407 std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn)
override
411 chainman().GuessVerificationProgress(block));
414 std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn)
override
421 NodeContext* context()
override {
return m_context; }
422 void setContext(NodeContext* context)
override
434 if (!index)
return false;
454 explicit NotificationsProxy(std::shared_ptr<Chain::Notifications> notifications)
456 virtual ~NotificationsProxy() =
default;
469 void BlockDisconnected(
const std::shared_ptr<const CBlock>& block,
const CBlockIndex* index)
override
483class NotificationsHandlerImpl :
public Handler
486 explicit NotificationsHandlerImpl(
ValidationSignals& signals, std::shared_ptr<Chain::Notifications> notifications)
487 :
m_signals{signals},
m_proxy{std::make_shared<NotificationsProxy>(std::move(notifications))}
491 ~NotificationsHandlerImpl()
override { disconnect(); }
492 void disconnect()
override
503class RpcHandlerImpl :
public Handler
528 void disconnect() final
536 ~RpcHandlerImpl()
override { disconnect(); }
542class ChainImpl :
public Chain
546 std::optional<int> getHeight()
override
549 return height >= 0 ? std::optional{height} : std::nullopt;
551 uint256 getBlockHash(
int height)
override
554 return Assert(chainman().ActiveChain()[height])->GetBlockHash();
556 bool haveBlockOnDisk(
int height)
override
559 const CBlockIndex* block{chainman().ActiveChain()[height]};
565 return chainman().ActiveChain().GetLocator();
570 const CBlockIndex* index = chainman().m_blockman.LookupBlockIndex(block_hash);
573 std::optional<int> findLocatorFork(
const CBlockLocator& locator)
override
576 if (
const CBlockIndex* fork = chainman().ActiveChainstate().FindForkInGlobalIndex(locator)) {
577 return fork->nHeight;
588 if (!block_filter_index)
return std::nullopt;
592 if (index ==
nullptr || !block_filter_index->LookupFilter(index, filter))
return std::nullopt;
598 return FillBlock(chainman().m_blockman.LookupBlockIndex(hash), block, lock, chainman().ActiveChain(), chainman().m_blockman);
600 bool findFirstBlockWithTimeAndHeight(int64_t min_time,
int min_height,
const FoundBlock& block)
override
603 const CChain& active = chainman().ActiveChain();
604 return FillBlock(active.
FindEarliestAtLeast(min_time, min_height), block, lock, active, chainman().m_blockman);
606 bool findAncestorByHeight(
const uint256& block_hash,
int ancestor_height,
const FoundBlock& ancestor_out)
override
609 const CChain& active = chainman().ActiveChain();
610 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
611 if (
const CBlockIndex* ancestor = block->GetAncestor(ancestor_height)) {
612 return FillBlock(ancestor, ancestor_out, lock, active, chainman().m_blockman);
615 return FillBlock(
nullptr, ancestor_out, lock, active, chainman().m_blockman);
617 bool findAncestorByHash(
const uint256& block_hash,
const uint256& ancestor_hash,
const FoundBlock& ancestor_out)
override
620 const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash);
621 const CBlockIndex* ancestor = chainman().m_blockman.LookupBlockIndex(ancestor_hash);
622 if (block && ancestor && block->
GetAncestor(ancestor->
nHeight) != ancestor) ancestor =
nullptr;
623 return FillBlock(ancestor, ancestor_out, lock, chainman().ActiveChain(), chainman().m_blockman);
628 const CChain& active = chainman().ActiveChain();
629 const CBlockIndex* block1 = chainman().m_blockman.LookupBlockIndex(block_hash1);
630 const CBlockIndex* block2 = chainman().m_blockman.LookupBlockIndex(block_hash2);
635 return int{FillBlock(ancestor, ancestor_out, lock, active, chainman().m_blockman)} &
636 int{FillBlock(block1, block1_out, lock, active, chainman().m_blockman)} &
637 int{FillBlock(block2, block2_out, lock, active, chainman().m_blockman)};
639 void findCoins(std::map<COutPoint, Coin>& coins)
override {
return FindCoins(
m_node, coins); }
640 double guessVerificationProgress(
const uint256& block_hash)
override
642 LOCK(chainman().GetMutex());
643 return chainman().GuessVerificationProgress(chainman().m_blockman.LookupBlockIndex(block_hash));
645 bool hasBlocks(
const uint256& block_hash,
int min_height, std::optional<int> max_height)
override
655 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
656 if (max_height && block->
nHeight >= *max_height) block = block->
GetAncestor(*max_height);
659 if (block->
nHeight <= min_height || !block->
pprev)
return true;
670 bool isInMempool(
const uint256& txid)
override
672 if (!
m_node.mempool)
return false;
676 bool hasDescendantsInMempool(
const uint256& txid)
override
678 if (!
m_node.mempool)
return false;
681 if (entry ==
nullptr)
return false;
682 return entry->GetCountWithDescendants() > 1;
687 std::string& err_string)
override
695 void getTransactionAncestry(
const uint256& txid,
size_t& ancestors,
size_t& descendants,
size_t* ancestorsize,
CAmount* ancestorfees)
override
697 ancestors = descendants = 0;
698 if (!
m_node.mempool)
return;
699 m_node.mempool->GetTransactionAncestry(txid, ancestors, descendants, ancestorsize, ancestorfees);
702 std::map<COutPoint, CAmount> calculateIndividualBumpFees(
const std::vector<COutPoint>& outpoints,
const CFeeRate& target_feerate)
override
705 std::map<COutPoint, CAmount> bump_fees;
706 for (
const auto& outpoint : outpoints) {
707 bump_fees.emplace(outpoint, 0);
711 return MiniMiner(*
m_node.mempool, outpoints).CalculateBumpFees(target_feerate);
714 std::optional<CAmount> calculateCombinedBumpFee(
const std::vector<COutPoint>& outpoints,
const CFeeRate& target_feerate)
override
719 return MiniMiner(*
m_node.mempool, outpoints).CalculateTotalBumpFees(target_feerate);
721 void getPackageLimits(
unsigned int& limit_ancestor_count,
unsigned int& limit_descendant_count)
override
727 limit_ancestor_count = limits.ancestor_count;
728 limit_descendant_count = limits.descendant_count;
732 if (!
m_node.mempool)
return {};
736 return m_node.mempool->CheckPackageLimits({tx}, entry.GetTxSize());
740 if (!
m_node.fee_estimator)
return {};
741 return m_node.fee_estimator->estimateSmartFee(num_blocks, calc, conservative);
743 unsigned int estimateMaxBlocks()
override
745 if (!
m_node.fee_estimator)
return 0;
750 if (!
m_node.mempool)
return {};
751 return m_node.mempool->GetMinFee();
756 return m_node.mempool->m_opts.min_relay_feerate;
758 CFeeRate relayIncrementalFee()
override
761 return m_node.mempool->m_opts.incremental_relay_feerate;
766 return m_node.mempool->m_opts.dust_relay_feerate;
768 bool havePruned()
override
771 return chainman().m_blockman.m_have_pruned;
773 bool isReadyToBroadcast()
override {
return !chainman().m_blockman.LoadingBlocks() && !isInitialBlockDownload(); }
774 bool isInitialBlockDownload()
override
776 return chainman().IsInitialBlockDownload();
779 void initMessage(
const std::string& message)
override {
::uiInterface.InitMessage(message); }
782 void showProgress(
const std::string& title,
int progress,
bool resume_possible)
override
784 ::uiInterface.ShowProgress(title, progress, resume_possible);
786 std::unique_ptr<Handler> handleNotifications(std::shared_ptr<Notifications> notifications)
override
788 return std::make_unique<NotificationsHandlerImpl>(validation_signals(), std::move(notifications));
790 void waitForNotificationsIfTipChanged(
const uint256& old_tip)
override
792 if (!old_tip.
IsNull() && old_tip ==
WITH_LOCK(
::cs_main,
return chainman().ActiveChain().Tip()->GetBlockHash()))
return;
793 validation_signals().SyncWithValidationInterfaceQueue();
797 return std::make_unique<RpcHandlerImpl>(
command);
800 void rpcRunLater(
const std::string&
name, std::function<
void()> fn, int64_t seconds)
override
808 std::vector<common::SettingsValue> getSettingsList(
const std::string&
name)
override
822 bool updateRwSetting(
const std::string&
name,
825 std::optional<interfaces::SettingsAction> action;
828 action = update_settings_func(*value);
829 if (value->isNull()) settings.rw_settings.erase(name);
832 action = update_settings_func(new_value);
833 if (!new_value.isNull()) settings.rw_settings[name] = std::move(new_value);
836 if (!action)
return false;
843 settings = std::move(value);
849 return overwriteRwSetting(
name, {}, action);
851 void requestMempoolTransactions(Notifications& notifications)
override
853 if (!
m_node.mempool)
return;
856 notifications.transactionAddedToMempool(entry.GetSharedTx());
859 bool hasAssumedValidChain()
override
861 return chainman().IsSnapshotActive();
864 NodeContext* context()
override {
return &
m_node; }
874 explicit BlockTemplateImpl(std::unique_ptr<CBlockTemplate> block_template, NodeContext&
node) :
m_block_template(std::move(block_template)),
m_node(
node)
884 CBlock getBlock()
override
889 std::vector<CAmount> getTxFees()
override
894 std::vector<int64_t> getTxSigops()
override
904 std::vector<unsigned char> getCoinbaseCommitment()
override
909 int getWitnessCommitmentIndex()
override
914 std::vector<uint256> getCoinbaseMerklePath()
override
919 bool submitSolution(uint32_t version, uint32_t timestamp, uint32_t
nonce,
CTransactionRef coinbase)
override
923 if (block.vtx.size() == 0) {
924 block.vtx.push_back(coinbase);
926 block.vtx[0] = coinbase;
930 block.
nTime = timestamp;
935 auto block_ptr = std::make_shared<const CBlock>(block);
936 return chainman().ProcessNewBlock(block_ptr,
true,
true,
nullptr);
945class MinerImpl :
public Mining
950 bool isTestChain()
override
952 return chainman().GetParams().IsTestChain();
955 bool isInitialBlockDownload()
override
957 return chainman().IsInitialBlockDownload();
960 std::optional<BlockRef>
getTip()
override
970 if (timeout > std::chrono::years{100}) timeout = std::chrono::years{100};
972 WAIT_LOCK(notifications().m_tip_block_mutex, lock);
973 notifications().m_tip_block_cv.wait_for(lock, timeout, [&]()
EXCLUSIVE_LOCKS_REQUIRED(notifications().m_tip_block_mutex) {
974 return (notifications().m_tip_block != current_tip && notifications().m_tip_block !=
uint256::ZERO) || chainman().m_interrupt;
979 return BlockRef{chainman().ActiveChain().Tip()->GetBlockHash(), chainman().ActiveChain().Tip()->nHeight};
982 std::unique_ptr<BlockTemplate> createNewBlock(
const BlockCreateOptions& options)
override
984 BlockAssembler::Options assemble_options{options};
989 NodeContext* context()
override {
return &
m_node; }
991 KernelNotifications& notifications() {
return *
Assert(
m_node.notifications); }
int64_t CAmount
Amount in satoshis (Can be negative)
BlockFilterIndex * GetBlockFilterIndex(BlockFilterType filter_type)
Get a block filter index by type.
CBlockLocator GetLocator(const CBlockIndex *index)
Get a locator for a block index entry.
const CBlockIndex * LastCommonAncestor(const CBlockIndex *pa, const CBlockIndex *pb)
Find the last common ancestor two blocks have.
@ BLOCK_HAVE_DATA
full block available in blk*.dat
const CChainParams & Params()
Return the currently selected parameters.
#define Assert(val)
Identity function.
common::SettingsValue GetSetting(const std::string &arg) const
Get setting value.
void LockSettings(Fn &&fn)
Access settings with lock held.
bool WriteSettingsFile(std::vector< std::string > *errors=nullptr, bool backup=false) const
Write settings file or backup settings file.
std::vector< common::SettingsValue > GetSettingsList(const std::string &arg) const
Get list of setting values.
common::SettingsValue GetPersistentSetting(const std::string &name) const
Get current setting from config file or read/write settings file, ignoring nonpersistent command line...
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
CategoryMask GetCategoryMask() const
Complete block filter struct as defined in BIP 157.
const GCSFilter & GetFilter() const LIFETIMEBOUND
BlockFilterIndex is used to store and retrieve block filters, hashes, and headers for a range of bloc...
The block chain is a tree shaped structure starting with the genesis block at the root,...
CBlockIndex * pprev
pointer to the index of the predecessor of this block
uint256 GetBlockHash() const
int64_t GetBlockTime() const
int64_t GetMedianTimePast() const
int64_t GetBlockTimeMax() const
unsigned int nTx
Number of transactions in this block.
int32_t nVersion
block header
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.
int nHeight
height of the entry in the chain. The genesis block has height 0
An in-memory indexed chain of blocks.
CBlockIndex * FindEarliestAtLeast(int64_t nTime, int height) const
Find the earliest block with timestamp equal or greater than the given time and height equal or great...
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
An outpoint - a combination of a transaction hash and an index n into its vout.
bool removeCommand(const std::string &name, const CRPCCommand *pcmd)
std::vector< std::string > listCommands() const
Returns a list of registered commands.
UniValue execute(const JSONRPCRequest &request) const
Execute a method.
void appendCommand(const std::string &name, const CRPCCommand *pcmd)
Appends a CRPCCommand to the dispatch table.
The basic transaction that is broadcasted on the network and contained in blocks.
CTxMemPoolEntry stores data about the corresponding transaction, as well as data about all in-mempool...
Implement this to subscribe to events generated in validation and mempool.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
Enables interaction with an external signing device or service, such as a hardware wallet.
std::string m_name
Name of signer.
static bool Enumerate(const std::string &command, std::vector< ExternalSigner > &signers, const std::string chain)
Obtain a list of signers.
std::unordered_set< Element, ByteVectorHash > ElementSet
bool MatchAny(const ElementSet &elements) const
Checks if any of the given elements may be in the set.
static GenTxid Txid(const uint256 &hash)
Wrapper around std::unique_lock style lock for MutexType.
void RegisterSharedValidationInterface(std::shared_ptr< CValidationInterface > callbacks)
Register subscriber.
void UnregisterSharedValidationInterface(std::shared_ptr< CValidationInterface > callbacks)
Unregister subscriber.
constexpr bool IsNull() const
Block template interface.
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
External signer interface used by the GUI.
Helper for findBlock to selectively return pieces of block data.
const FoundBlock * m_next_block
CBlockLocator * m_locator
Generic interface for managing an event handler or callback function registered with another interfac...
Interface giving clients (RPC, Stratum v2 Template Provider in the future) ability to create block te...
Top-level interface for a bitcoin node (bitcoind process).
Wallet chain client that in addition to having chain client methods for starting up,...
Generate a new block, without valid proof-of-work.
std::unique_ptr< CBlockTemplate > CreateNewBlock()
Construct a new block template.
static transaction_identifier FromUint256(const uint256 &id)
static const uint256 ZERO
int GetWitnessCommitmentIndex(const CBlock &block)
Compute at which vout of the block's coinbase transaction the witness commitment occurs,...
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
static CService ip(uint32_t i)
void InitLogging(const ArgsManager &args)
Initialize global loggers.
bool AppInitLockDataDirectory()
Lock bitcoin core data directory.
bool AppInitBasicSetup(const ArgsManager &args, std::atomic< int > &exit_status)
Initialize bitcoin core: Basic context setup.
bool ShutdownRequested(node::NodeContext &node)
Return whether node shutdown was requested.
bool AppInitParameterInteraction(const ArgsManager &args)
Initialization: parameter interaction.
bool AppInitInterfaces(NodeContext &node)
Initialize node and wallet interface pointers.
void InitParameterInteraction(ArgsManager &args)
Parameter interaction: change current parameters depending on various rules.
bool AppInitMain(NodeContext &node, interfaces::BlockAndHeaderTipInfo *tip_info)
Bitcoin core main initialization.
bool AppInitSanityChecks(const kernel::Context &kernel)
Initialization sanity checks.
CClientUIInterface uiInterface
void InitWarning(const bilingual_str &str)
Show warning message.
bool InitError(const bilingual_str &str)
Show error message.
ChainstateRole
This enum describes the various roles a specific Chainstate instance can take.
BCLog::Logger & LogInstance()
void StartMapPort(bool use_pcp)
MemPoolRemovalReason
Reason why a transaction was removed from the mempool, this is passed to the notification signal.
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
std::vector< uint256 > TransactionMerklePath(const CBlock &block, uint32_t position)
Compute merkle path to the specified transaction.
auto FindKey(Map &&map, Key &&key) -> decltype(&map.at(key))
Map lookup helper.
std::unique_ptr< Node > MakeNode(node::NodeContext &context)
Return implementation of Node interface.
std::unique_ptr< Mining > MakeMining(node::NodeContext &node)
Return implementation of Mining interface.
std::unique_ptr< Handler > MakeSignalHandler(boost::signals2::connection connection)
Return handler wrapping a boost signal connection.
SettingsAction
The action to be taken after updating a settings value.
std::unique_ptr< Chain > MakeChain(node::NodeContext &node)
Return implementation of Chain interface.
std::function< std::optional< interfaces::SettingsAction >(common::SettingsValue &)> SettingsUpdate
interfaces::BlockInfo MakeBlockInfo(const CBlockIndex *index, const CBlock *data)
Return data from block index.
void FindCoins(const NodeContext &node, std::map< COutPoint, Coin > &coins)
Look up unspent output information.
TransactionError BroadcastTransaction(NodeContext &node, const CTransactionRef tx, std::string &err_string, const CAmount &max_tx_fee, bool relay, bool wait_callback)
Submit a transaction to the mempool and (optionally) relay it to all P2P peers.
util::Result< void > ApplyArgsManOptions(const ArgsManager &args, BlockManager::Options &opts)
auto Join(const C &container, const S &separator, UnaryOp unary_op)
Join all container items.
std::map< CSubNet, CBanEntry > banmap_t
bool GetProxy(enum Network net, Proxy &proxyInfoOut)
ValidationSignals & m_signals
::ExternalSigner m_signer
std::shared_ptr< Chain::Notifications > m_notifications
const CRPCCommand * m_wrapped_command
const std::unique_ptr< CBlockTemplate > m_block_template
std::shared_ptr< NotificationsProxy > m_proxy
is a home for public enum and struct type definitions that are used by internally by node code,...
RBFTransactionState IsRBFOptInEmptyMempool(const CTransaction &tx)
RBFTransactionState IsRBFOptIn(const CTransaction &tx, const CTxMemPool &pool)
Determine whether an unconfirmed transaction is signaling opt-in to RBF according to BIP 125 This inv...
RBFTransactionState
The rbf state of unconfirmed transactions.
static constexpr unsigned int DEFAULT_INCREMENTAL_RELAY_FEE
Default for -incrementalrelayfee, which sets the minimum feerate increase for mempool limiting or rep...
static constexpr unsigned int DUST_RELAY_TX_FEE
Min feerate for defining dust.
static constexpr unsigned int DEFAULT_MIN_RELAY_TX_FEE
Default for -minrelaytxfee, minimum relay fee for transactions.
std::shared_ptr< const CTransaction > CTransactionRef
@ RPC_WALLET_NOT_FOUND
Invalid wallet specified.
void RPCSetTimerInterfaceIfUnset(RPCTimerInterface *iface)
Set the factory function for timer, but only, if unset.
bool IsDeprecatedRPCEnabled(const std::string &method)
void RPCUnsetTimerInterface(RPCTimerInterface *iface)
Unset factory function for timers.
void RPCRunLater(const std::string &name, std::function< void()> func, int64_t nSeconds)
Run func nSeconds from now.
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
const CTransactionRef m_tx
std::map< std::string, SettingsValue > rw_settings
Map of setting name to read-write file setting value.
std::map< std::string, std::vector< SettingsValue > > command_line_options
Map of setting name to list of command line values.
Block and header tip information.
Hash/height pair to help track and identify blocks.
Block tip (could be a header or not, depends on the subscribed signal).
Options struct containing limit options for a CTxMemPool.
NodeContext struct containing references to chain state and connection state.
#define WAIT_LOCK(cs, name)
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
#define TRY_LOCK(cs, name)
#define EXCLUSIVE_LOCKS_REQUIRED(...)
std::chrono::duration< double, std::chrono::milliseconds::period > MillisecondsDouble
bilingual_str Untranslated(std::string original)
Mark a bilingual_str as untranslated.
SynchronizationState
Current sync state passed to tip changed callbacks.
TipBlock getTip(const CChainParams ¶ms, const node::NodeContext &context)