7#include <blockfilter.h>
9#include <chainparams.h>
68#include <boost/signals2/signal.hpp>
85#ifdef ENABLE_EXTERNAL_SIGNER
95class NodeImpl :
public Node
98 explicit NodeImpl(NodeContext& context) { setContext(&context); }
102 int getExitStatus()
override {
return Assert(m_context)->exit_status.load(); }
104 bool baseInitialize()
override
109 m_context->warnings = std::make_unique<node::Warnings>();
110 m_context->kernel = std::make_unique<kernel::Context>();
111 m_context->ecc_context = std::make_unique<ECC_Context>();
121 if (
AppInitMain(*m_context, tip_info))
return true;
123 m_context->exit_status.store(EXIT_FAILURE);
126 void appShutdown()
override
131 void startShutdown()
override
134 LogError(
"Failed to send shutdown signal\n");
137 if (
args().GetBoolArg(
"-server",
false)) {
143 bool isSettingIgnored(
const std::string&
name)
override
145 bool ignored =
false;
148 ignored = !options->empty();
175 void resetSettings()
override
183 void mapPort(
bool use_upnp,
bool use_natpmp)
override {
StartMapPort(use_upnp, use_natpmp); }
189 bool getNodesStats(NodesStats& stats)
override
194 std::vector<CNodeStats> stats_temp;
195 m_context->connman->GetNodeStats(stats_temp);
197 stats.reserve(stats_temp.size());
198 for (
auto& node_stats_temp : stats_temp) {
199 stats.emplace_back(std::move(node_stats_temp),
false,
CNodeStateStats());
206 for (
auto& node_stats : stats) {
207 std::get<1>(node_stats) =
208 m_context->peerman->GetNodeStateStats(std::get<0>(node_stats).nodeid, std::get<2>(node_stats));
216 bool getBanned(
banmap_t& banmap)
override
224 bool ban(
const CNetAddr& net_addr, int64_t ban_time_offset)
override
227 m_context->banman->Ban(net_addr, ban_time_offset);
240 bool disconnectByAddress(
const CNetAddr& net_addr)
override
243 return m_context->connman->DisconnectNode(net_addr);
247 bool disconnectById(
NodeId id)
override
250 return m_context->connman->DisconnectNode(
id);
254 std::vector<std::unique_ptr<interfaces::ExternalSigner>> listExternalSigners()
override
256#ifdef ENABLE_EXTERNAL_SIGNER
257 std::vector<ExternalSigner> signers = {};
261 std::vector<std::unique_ptr<interfaces::ExternalSigner>> result;
262 result.reserve(signers.size());
263 for (
auto& signer : signers) {
264 result.emplace_back(std::make_unique<ExternalSignerImpl>(std::move(signer)));
277 int64_t getTotalBytesRecv()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesRecv() : 0; }
278 int64_t getTotalBytesSent()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesSent() : 0; }
279 size_t getMempoolSize()
override {
return m_context->mempool ?
m_context->mempool->size() : 0; }
280 size_t getMempoolDynamicUsage()
override {
return m_context->mempool ?
m_context->mempool->DynamicMemoryUsage() : 0; }
281 size_t getMempoolMaxUsage()
override {
return m_context->mempool ?
m_context->mempool->m_opts.max_size_bytes : 0; }
282 bool getHeaderTip(
int& height, int64_t& block_time)
override
285 auto best_header = chainman().m_best_header;
287 height = best_header->nHeight;
288 block_time = best_header->GetBlockTime();
293 std::map<CNetAddr, LocalServiceInfo> getNetLocalAddresses()
override
296 return m_context->connman->getNetLocalAddresses();
300 int getNumBlocks()
override
303 return chainman().ActiveChain().Height();
305 uint256 getBestBlockHash()
override
308 return tip ? tip->
GetBlockHash() : chainman().GetParams().GenesisBlock().GetHash();
310 int64_t getLastBlockTime()
override
313 if (chainman().ActiveChain().Tip()) {
314 return chainman().ActiveChain().Tip()->GetBlockTime();
316 return chainman().GetParams().GenesisBlock().GetBlockTime();
318 double getVerificationProgress()
override
322 bool isInitialBlockDownload()
override
324 return chainman().IsInitialBlockDownload();
326 bool isLoadingBlocks()
override {
return chainman().m_blockman.LoadingBlocks(); }
327 void setNetworkActive(
bool active)
override
330 m_context->connman->SetNetworkActive(active);
333 bool getNetworkActive()
override {
return m_context->connman &&
m_context->connman->GetNetworkActive(); }
337 return m_context->mempool->m_opts.dust_relay_feerate;
346 return ::tableRPC.execute(req);
348 std::vector<std::string> listRpcCommands()
override { return ::tableRPC.listCommands(); }
351 std::optional<Coin> getUnspentOutput(
const COutPoint& output)
override
355 if (chainman().ActiveChainstate().CoinsTip().GetCoin(output, coin))
return coin;
366 std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn)
override
368 return MakeSignalHandler(
::uiInterface.InitMessage_connect(fn));
370 std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn)
override
372 return MakeSignalHandler(
::uiInterface.ThreadSafeMessageBox_connect(fn));
374 std::unique_ptr<Handler> handleQuestion(QuestionFn fn)
override
376 return MakeSignalHandler(
::uiInterface.ThreadSafeQuestion_connect(fn));
378 std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn)
override
380 return MakeSignalHandler(
::uiInterface.ShowProgress_connect(fn));
382 std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn)
override
384 return MakeSignalHandler(
::uiInterface.InitWallet_connect(fn));
386 std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn)
override
388 return MakeSignalHandler(
::uiInterface.NotifyNumConnectionsChanged_connect(fn));
390 std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn)
override
392 return MakeSignalHandler(
::uiInterface.NotifyNetworkActiveChanged_connect(fn));
394 std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn)
override
396 return MakeSignalHandler(
::uiInterface.NotifyAlertChanged_connect(fn));
398 std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn)
override
400 return MakeSignalHandler(
::uiInterface.BannedListChanged_connect(fn));
402 std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn)
override
409 std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn)
override
411 return MakeSignalHandler(
416 NodeContext* context()
override {
return m_context; }
417 void setContext(NodeContext* context)
override
429 if (!index)
return false;
449 explicit NotificationsProxy(std::shared_ptr<Chain::Notifications> notifications)
451 virtual ~NotificationsProxy() =
default;
464 void BlockDisconnected(
const std::shared_ptr<const CBlock>& block,
const CBlockIndex* index)
override
478class NotificationsHandlerImpl :
public Handler
481 explicit NotificationsHandlerImpl(
ValidationSignals& signals, std::shared_ptr<Chain::Notifications> notifications)
482 :
m_signals{signals},
m_proxy{std::make_shared<NotificationsProxy>(std::move(notifications))}
486 ~NotificationsHandlerImpl()
override { disconnect(); }
487 void disconnect()
override
498class RpcHandlerImpl :
public Handler
523 void disconnect() final
525 if (m_wrapped_command) {
531 ~RpcHandlerImpl()
override { disconnect(); }
537class ChainImpl :
public Chain
541 std::optional<int> getHeight()
override
544 return height >= 0 ? std::optional{height} : std::nullopt;
546 uint256 getBlockHash(
int height)
override
549 return Assert(chainman().ActiveChain()[height])->GetBlockHash();
551 bool haveBlockOnDisk(
int height)
override
554 const CBlockIndex* block{chainman().ActiveChain()[height]};
560 return chainman().ActiveChain().GetLocator();
565 const CBlockIndex* index = chainman().m_blockman.LookupBlockIndex(block_hash);
568 std::optional<int> findLocatorFork(
const CBlockLocator& locator)
override
571 if (
const CBlockIndex* fork = chainman().ActiveChainstate().FindForkInGlobalIndex(locator)) {
572 return fork->nHeight;
583 if (!block_filter_index)
return std::nullopt;
587 if (index ==
nullptr || !block_filter_index->LookupFilter(index, filter))
return std::nullopt;
593 return FillBlock(chainman().m_blockman.LookupBlockIndex(hash), block, lock, chainman().ActiveChain(), chainman().m_blockman);
595 bool findFirstBlockWithTimeAndHeight(int64_t min_time,
int min_height,
const FoundBlock& block)
override
598 const CChain& active = chainman().ActiveChain();
599 return FillBlock(active.
FindEarliestAtLeast(min_time, min_height), block, lock, active, chainman().m_blockman);
601 bool findAncestorByHeight(
const uint256& block_hash,
int ancestor_height,
const FoundBlock& ancestor_out)
override
604 const CChain& active = chainman().ActiveChain();
605 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
606 if (
const CBlockIndex* ancestor = block->GetAncestor(ancestor_height)) {
607 return FillBlock(ancestor, ancestor_out, lock, active, chainman().m_blockman);
610 return FillBlock(
nullptr, ancestor_out, lock, active, chainman().m_blockman);
612 bool findAncestorByHash(
const uint256& block_hash,
const uint256& ancestor_hash,
const FoundBlock& ancestor_out)
override
615 const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash);
616 const CBlockIndex* ancestor = chainman().m_blockman.LookupBlockIndex(ancestor_hash);
617 if (block && ancestor && block->
GetAncestor(ancestor->
nHeight) != ancestor) ancestor =
nullptr;
618 return FillBlock(ancestor, ancestor_out, lock, chainman().ActiveChain(), chainman().m_blockman);
623 const CChain& active = chainman().ActiveChain();
624 const CBlockIndex* block1 = chainman().m_blockman.LookupBlockIndex(block_hash1);
625 const CBlockIndex* block2 = chainman().m_blockman.LookupBlockIndex(block_hash2);
630 return int{FillBlock(ancestor, ancestor_out, lock, active, chainman().m_blockman)} &
631 int{FillBlock(block1, block1_out, lock, active, chainman().m_blockman)} &
632 int{FillBlock(block2, block2_out, lock, active, chainman().m_blockman)};
634 void findCoins(std::map<COutPoint, Coin>& coins)
override {
return FindCoins(m_node, coins); }
635 double guessVerificationProgress(
const uint256& block_hash)
override
640 bool hasBlocks(
const uint256& block_hash,
int min_height, std::optional<int> max_height)
override
650 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
651 if (max_height && block->
nHeight >= *max_height) block = block->
GetAncestor(*max_height);
654 if (block->
nHeight <= min_height || !block->
pprev)
return true;
665 bool isInMempool(
const uint256& txid)
override
671 bool hasDescendantsInMempool(
const uint256& txid)
override
676 if (entry ==
nullptr)
return false;
677 return entry->GetCountWithDescendants() > 1;
682 std::string& err_string)
override
690 void getTransactionAncestry(
const uint256& txid,
size_t& ancestors,
size_t& descendants,
size_t* ancestorsize,
CAmount* ancestorfees)
override
692 ancestors = descendants = 0;
694 m_node.
mempool->GetTransactionAncestry(txid, ancestors, descendants, ancestorsize, ancestorfees);
697 std::map<COutPoint, CAmount> calculateIndividualBumpFees(
const std::vector<COutPoint>& outpoints,
const CFeeRate& target_feerate)
override
700 std::map<COutPoint, CAmount> bump_fees;
701 for (
const auto& outpoint : outpoints) {
702 bump_fees.emplace(outpoint, 0);
706 return MiniMiner(*
m_node.
mempool, outpoints).CalculateBumpFees(target_feerate);
709 std::optional<CAmount> calculateCombinedBumpFee(
const std::vector<COutPoint>& outpoints,
const CFeeRate& target_feerate)
override
714 return MiniMiner(*
m_node.
mempool, outpoints).CalculateTotalBumpFees(target_feerate);
716 void getPackageLimits(
unsigned int& limit_ancestor_count,
unsigned int& limit_descendant_count)
override
723 limit_descendant_count = limits.descendant_count;
731 return m_node.
mempool->CheckPackageLimits({tx}, entry.GetTxSize());
738 unsigned int estimateMaxBlocks()
override
753 CFeeRate relayIncrementalFee()
override
763 bool havePruned()
override
766 return chainman().m_blockman.m_have_pruned;
768 bool isReadyToBroadcast()
override {
return !chainman().m_blockman.LoadingBlocks() && !isInitialBlockDownload(); }
769 bool isInitialBlockDownload()
override
771 return chainman().IsInitialBlockDownload();
774 void initMessage(
const std::string& message)
override {
::uiInterface.InitMessage(message); }
777 void showProgress(
const std::string& title,
int progress,
bool resume_possible)
override
779 ::uiInterface.ShowProgress(title, progress, resume_possible);
781 std::unique_ptr<Handler> handleNotifications(std::shared_ptr<Notifications> notifications)
override
783 return std::make_unique<NotificationsHandlerImpl>(validation_signals(), std::move(notifications));
785 void waitForNotificationsIfTipChanged(
const uint256& old_tip)
override
787 if (!old_tip.
IsNull() && old_tip ==
WITH_LOCK(
::cs_main,
return chainman().ActiveChain().Tip()->GetBlockHash()))
return;
788 validation_signals().SyncWithValidationInterfaceQueue();
792 return std::make_unique<RpcHandlerImpl>(
command);
795 void rpcRunLater(
const std::string&
name, std::function<
void()> fn, int64_t seconds)
override
803 std::vector<common::SettingsValue> getSettingsList(
const std::string&
name)
override
817 bool updateRwSetting(
const std::string&
name,
820 std::optional<interfaces::SettingsAction> action;
825 action = update_settings_func(value);
827 if (!action)
return false;
833 if (value.
isNull())
return deleteRwSettings(
name, write);
835 settings = std::move(value);
839 bool deleteRwSettings(
const std::string&
name,
bool write)
override
846 void requestMempoolTransactions(Notifications& notifications)
override
851 notifications.transactionAddedToMempool(entry.GetSharedTx());
854 bool hasAssumedValidChain()
override
856 return chainman().IsSnapshotActive();
859 NodeContext* context()
override {
return &
m_node; }
866class MinerImpl :
public Mining
871 bool isTestChain()
override
873 return chainman().GetParams().IsTestChain();
876 bool isInitialBlockDownload()
override
878 return chainman().IsInitialBlockDownload();
881 std::optional<uint256> getTipHash()
override
889 bool processNewBlock(
const std::shared_ptr<const CBlock>& block,
bool* new_block)
override
891 return chainman().ProcessNewBlock(block,
true,
true, new_block);
894 unsigned int getTransactionsUpdated()
override
896 return context()->mempool->GetTransactionsUpdated();
905 state.
Error(
"Block does not connect to current chain tip.");
909 return TestBlockValidity(state, chainman().GetParams(), chainman().ActiveChainstate(), block, tip,
false, check_merkle_root);
912 std::unique_ptr<CBlockTemplate> createNewBlock(
const CScript& script_pub_key,
const BlockCreateOptions& options)
override
914 BlockAssembler::Options assemble_options{options};
919 NodeContext* context()
override {
return &
m_node; }
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.
uint32_t 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.
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)
void appendCommand(const std::string &name, const CRPCCommand *pcmd)
Appends a CRPCCommand to the dispatch table.
Serialized script, used inside transaction inputs and outputs.
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.
bool Error(const std::string &reject_reason)
constexpr bool IsNull() const
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(const CScript &scriptPubKeyIn)
Construct a new block template with coinbase to scriptPubKeyIn.
static transaction_identifier FromUint256(const uint256 &id)
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_upnp, bool use_natpmp)
MemPoolRemovalReason
Reason why a transaction was removed from the mempool, this is passed to the notification signal.
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.
std::function< std::optional< interfaces::SettingsAction >(common::SettingsValue &)> SettingsUpdate
std::unique_ptr< Chain > MakeChain(node::NodeContext &node)
Return implementation of Chain interface.
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
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 > forced_settings
Map of setting name to forced setting value.
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.
Block tip (could be a header or not, depends on the subscribed signal).
Options struct containing limit options for a CTxMemPool.
int64_t ancestor_count
The maximum allowed number of transactions in a package including the entry and its ancestors.
NodeContext struct containing references to chain state and connection state.
std::unique_ptr< ValidationSignals > validation_signals
Issues calls about blocks and transactions.
std::unique_ptr< CTxMemPool > mempool
std::unique_ptr< ChainstateManager > chainman
std::unique_ptr< CBlockPolicyEstimator > fee_estimator
#define WAIT_LOCK(cs, name)
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
#define TRY_LOCK(cs, name)
bilingual_str Untranslated(std::string original)
Mark a bilingual_str as untranslated.
double GuessVerificationProgress(const ChainTxData &data, const CBlockIndex *pindex)
Guess how far we are in the verification process at the given block index require cs_main if pindex h...
bool TestBlockValidity(BlockValidationState &state, const CChainParams &chainparams, Chainstate &chainstate, const CBlock &block, CBlockIndex *pindexPrev, bool fCheckPOW, bool fCheckMerkleRoot)
Check a block is completely valid from start to finish (only works on top of our current best block)
SynchronizationState
Current sync state passed to tip changed callbacks.