45 #include <validation.h> 49 #if defined(HAVE_CONFIG_H) 58 #include <boost/signals2/signal.hpp> 72 #ifdef ENABLE_EXTERNAL_SIGNER 82 class NodeImpl :
public Node 90 bool baseInitialize()
override 95 m_context->kernel = std::make_unique<kernel::Context>();
107 void appShutdown()
override 112 void startShutdown()
override 122 bool isSettingIgnored(
const std::string&
name)
override 124 bool ignored =
false;
127 ignored = !options->empty();
154 void resetSettings()
override 162 void mapPort(
bool use_upnp,
bool use_natpmp)
override {
StartMapPort(use_upnp, use_natpmp); }
168 bool getNodesStats(NodesStats& stats)
override 173 std::vector<CNodeStats> stats_temp;
174 m_context->connman->GetNodeStats(stats_temp);
176 stats.reserve(stats_temp.size());
177 for (
auto& node_stats_temp : stats_temp) {
178 stats.emplace_back(std::move(node_stats_temp),
false,
CNodeStateStats());
185 for (
auto& node_stats : stats) {
186 std::get<1>(node_stats) =
187 m_context->peerman->GetNodeStateStats(std::get<0>(node_stats).nodeid, std::get<2>(node_stats));
195 bool getBanned(
banmap_t& banmap)
override 203 bool ban(
const CNetAddr& net_addr, int64_t ban_time_offset)
override 206 m_context->banman->Ban(net_addr, ban_time_offset);
219 bool disconnectByAddress(
const CNetAddr& net_addr)
override 222 return m_context->connman->DisconnectNode(net_addr);
226 bool disconnectById(
NodeId id)
override 229 return m_context->connman->DisconnectNode(
id);
233 std::vector<std::unique_ptr<interfaces::ExternalSigner>> listExternalSigners()
override 235 #ifdef ENABLE_EXTERNAL_SIGNER 236 std::vector<ExternalSigner> signers = {};
240 std::vector<std::unique_ptr<interfaces::ExternalSigner>> result;
241 for (
auto& signer : signers) {
242 result.emplace_back(std::make_unique<ExternalSignerImpl>(std::move(signer)));
253 #endif // ENABLE_EXTERNAL_SIGNER 255 int64_t getTotalBytesRecv()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesRecv() : 0; }
256 int64_t getTotalBytesSent()
override {
return m_context->connman ?
m_context->connman->GetTotalBytesSent() : 0; }
257 size_t getMempoolSize()
override {
return m_context->mempool ?
m_context->mempool->size() : 0; }
258 size_t getMempoolDynamicUsage()
override {
return m_context->mempool ?
m_context->mempool->DynamicMemoryUsage() : 0; }
259 bool getHeaderTip(
int& height, int64_t& block_time)
override 262 auto best_header = chainman().m_best_header;
264 height = best_header->nHeight;
265 block_time = best_header->GetBlockTime();
270 int getNumBlocks()
override 273 return chainman().ActiveChain().Height();
275 uint256 getBestBlockHash()
override 278 return tip ? tip->
GetBlockHash() : chainman().GetParams().GenesisBlock().GetHash();
280 int64_t getLastBlockTime()
override 283 if (chainman().ActiveChain().Tip()) {
284 return chainman().ActiveChain().Tip()->GetBlockTime();
286 return chainman().GetParams().GenesisBlock().GetBlockTime();
288 double getVerificationProgress()
override 292 bool isInitialBlockDownload()
override {
293 return chainman().ActiveChainstate().IsInitialBlockDownload();
297 void setNetworkActive(
bool active)
override 300 m_context->connman->SetNetworkActive(active);
303 bool getNetworkActive()
override {
return m_context->connman &&
m_context->connman->GetNetworkActive(); }
307 return m_context->mempool->m_dust_relay_feerate;
321 bool getUnspentOutput(
const COutPoint& output,
Coin& coin)
override 324 return chainman().ActiveChainstate().CoinsTip().GetCoin(output, coin);
334 std::unique_ptr<Handler> handleInitMessage(InitMessageFn fn)
override 338 std::unique_ptr<Handler> handleMessageBox(MessageBoxFn fn)
override 342 std::unique_ptr<Handler> handleQuestion(QuestionFn fn)
override 346 std::unique_ptr<Handler> handleShowProgress(ShowProgressFn fn)
override 350 std::unique_ptr<Handler> handleInitWallet(InitWalletFn fn)
override 354 std::unique_ptr<Handler> handleNotifyNumConnectionsChanged(NotifyNumConnectionsChangedFn fn)
override 358 std::unique_ptr<Handler> handleNotifyNetworkActiveChanged(NotifyNetworkActiveChangedFn fn)
override 362 std::unique_ptr<Handler> handleNotifyAlertChanged(NotifyAlertChangedFn fn)
override 366 std::unique_ptr<Handler> handleBannedListChanged(BannedListChangedFn fn)
override 370 std::unique_ptr<Handler> handleNotifyBlockTip(NotifyBlockTipFn fn)
override 373 fn(sync_state, BlockTip{block->nHeight, block->GetBlockTime(), block->GetBlockHash()},
377 std::unique_ptr<Handler> handleNotifyHeaderTip(NotifyHeaderTipFn fn)
override 381 fn(sync_state, BlockTip{(int)height, timestamp, uint256{}}, presync);
385 void setContext(NodeContext*
context)
override 395 if (!index)
return false;
415 explicit NotificationsProxy(std::shared_ptr<Chain::Notifications> notifications)
417 virtual ~NotificationsProxy() =
default;
424 m_notifications->transactionRemovedFromMempool(tx, reason, mempool_sequence);
442 class NotificationsHandlerImpl :
public Handler 445 explicit NotificationsHandlerImpl(std::shared_ptr<Chain::Notifications> notifications)
446 :
m_proxy(std::make_shared<NotificationsProxy>(std::move(notifications)))
450 ~NotificationsHandlerImpl()
override {
disconnect(); }
461 class RpcHandlerImpl :
public Handler 500 class ChainImpl :
public Chain 506 const int height{
WITH_LOCK(::
cs_main,
return chainman().ActiveChain().Height())};
507 return height >= 0 ? std::optional{height} : std::nullopt;
512 return Assert(chainman().ActiveChain()[height])->GetBlockHash();
517 const CBlockIndex* block{chainman().ActiveChain()[height]};
523 return chainman().ActiveChain().GetLocator();
528 const CBlockIndex* index = chainman().m_blockman.LookupBlockIndex(block_hash);
534 if (
const CBlockIndex* fork = chainman().ActiveChainstate().FindForkInGlobalIndex(locator)) {
535 return fork->nHeight;
542 return FillBlock(chainman().m_blockman.LookupBlockIndex(hash), block, lock, chainman().ActiveChain());
547 const CChain& active = chainman().ActiveChain();
553 const CChain& active = chainman().ActiveChain();
554 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
555 if (
const CBlockIndex* ancestor = block->GetAncestor(ancestor_height)) {
556 return FillBlock(ancestor, ancestor_out, lock, active);
559 return FillBlock(
nullptr, ancestor_out, lock, active);
564 const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash);
565 const CBlockIndex* ancestor = chainman().m_blockman.LookupBlockIndex(ancestor_hash);
566 if (block && ancestor && block->
GetAncestor(ancestor->
nHeight) != ancestor) ancestor =
nullptr;
567 return FillBlock(ancestor, ancestor_out, lock, chainman().ActiveChain());
572 const CChain& active = chainman().ActiveChain();
573 const CBlockIndex* block1 = chainman().m_blockman.LookupBlockIndex(block_hash1);
574 const CBlockIndex* block2 = chainman().m_blockman.LookupBlockIndex(block_hash2);
579 return int{FillBlock(ancestor, ancestor_out, lock, active)} &
580 int{FillBlock(block1, block1_out, lock, active)} &
581 int{FillBlock(block2, block2_out, lock, active)};
589 bool hasBlocks(
const uint256& block_hash,
int min_height, std::optional<int> max_height)
override 599 if (
const CBlockIndex* block = chainman().m_blockman.LookupBlockIndex(block_hash)) {
600 if (max_height && block->
nHeight >= *max_height) block = block->
GetAncestor(*max_height);
603 if (block->
nHeight <= min_height || !block->
pprev)
return true;
616 if (!
m_node.mempool)
return false;
622 if (!
m_node.mempool)
return false;
624 auto it =
m_node.mempool->GetIter(txid);
625 return it && (*it)->GetCountWithDescendants() > 1;
630 std::string& err_string)
override 640 ancestors = descendants = 0;
641 if (!
m_node.mempool)
return;
642 m_node.mempool->GetTransactionAncestry(txid, ancestors, descendants, ancestorsize, ancestorfees);
644 void getPackageLimits(
unsigned int& limit_ancestor_count,
unsigned int& limit_descendant_count)
override 650 limit_ancestor_count = limits.ancestor_count;
651 limit_descendant_count = limits.descendant_count;
655 if (!
m_node.mempool)
return true;
660 std::string unused_error_string;
662 return m_node.mempool->CalculateMemPoolAncestors(
663 entry, ancestors, limits.ancestor_count, limits.ancestor_size_vbytes,
664 limits.descendant_count, limits.descendant_size_vbytes, unused_error_string);
668 if (!
m_node.fee_estimator)
return {};
669 return m_node.fee_estimator->estimateSmartFee(num_blocks, calc, conservative);
673 if (!
m_node.fee_estimator)
return 0;
678 if (!
m_node.mempool)
return {};
679 return m_node.mempool->GetMinFee();
684 return m_node.mempool->m_min_relay_feerate;
689 return m_node.mempool->m_incremental_relay_feerate;
694 return m_node.mempool->m_dust_relay_feerate;
699 return chainman().m_blockman.m_have_pruned;
703 return chainman().ActiveChainstate().IsInitialBlockDownload();
709 void showProgress(
const std::string& title,
int progress,
bool resume_possible)
override 711 ::uiInterface.ShowProgress(title, progress, resume_possible);
713 std::unique_ptr<Handler>
handleNotifications(std::shared_ptr<Notifications> notifications)
override 715 return std::make_unique<NotificationsHandlerImpl>(std::move(notifications));
719 if (!old_tip.
IsNull() && old_tip ==
WITH_LOCK(::
cs_main,
return chainman().ActiveChain().Tip()->GetBlockHash()))
return;
724 return std::make_unique<RpcHandlerImpl>(
command);
727 void rpcRunLater(
const std::string&
name, std::function<
void()> fn, int64_t seconds)
override 763 if (!
m_node.mempool)
return;
766 notifications.transactionAddedToMempool(entry.
GetSharedTx(), 0 );
771 return chainman().IsSnapshotActive();
std::shared_ptr< const CTransaction > CTransactionRef
virtual bool haveBlockOnDisk(int height)=0
Check that the block is available on disk (i.e.
std::map< std::string, SettingsValue > rw_settings
Map of setting name to read-write file setting value.
Helper for findBlock to selectively return pieces of block data.
virtual void ChainStateFlushed(const CBlockLocator &locator)
Notifies listeners of the new active block chain on-disk.
virtual bool findCommonAncestor(const uint256 &block_hash1, const uint256 &block_hash2, const FoundBlock &ancestor_out={}, const FoundBlock &block1_out={}, const FoundBlock &block2_out={})=0
Find most recent common ancestor between two blocks and optionally return block information.
virtual void findCoins(std::map< COutPoint, Coin > &coins)=0
Look up unspent output information.
bool ShutdownRequested()
Returns true if a shutdown is requested, false otherwise.
virtual void getTransactionAncestry(const uint256 &txid, size_t &ancestors, size_t &descendants, size_t *ancestorsize=nullptr, CAmount *ancestorfees=nullptr)=0
Calculate mempool ancestor and descendant counts for the given transaction.
void SyncWithValidationInterfaceQueue()
This is a synonym for the following, which asserts certain locks are not held: std::promise<void> pro...
virtual void getPackageLimits(unsigned int &limit_ancestor_count, unsigned int &limit_descendant_count)=0
Get the node's package limits.
Block tip (could be a header or not, depends on the subscribed signal).
virtual int rpcSerializationFlags()=0
Current RPC serialization flags.
Enables interaction with an external signing device or service, such as a hardware wallet...
virtual void TransactionRemovedFromMempool(const CTransactionRef &tx, MemPoolRemovalReason reason, uint64_t mempool_sequence)
Notifies listeners of a transaction leaving mempool.
static constexpr unsigned int DEFAULT_INCREMENTAL_RELAY_FEE
Default for -incrementalrelayfee, which sets the minimum feerate increase for mempool limiting or rep...
void InitLogging(const ArgsManager &args)
Initialize global loggers.
SynchronizationState
Current sync state passed to tip changed callbacks.
BCLog::Logger & LogInstance()
virtual std::optional< int > getHeight()=0
Get current chain height, not including genesis block (returns 0 if chain only contains genesis block...
bool ReadBlockFromDisk(CBlock &block, const FlatFilePos &pos, const Consensus::Params &consensusParams)
Functions for disk access for blocks.
virtual bool findFirstBlockWithTimeAndHeight(int64_t min_time, int min_height, const FoundBlock &block={})=0
Find first block in the chain with timestamp >= the given time and height >= than the given height...
CClientUIInterface uiInterface
int64_t GetBlockTime() const
Describes a place in the block chain to another node such that if the other node doesn't have the sam...
virtual std::unique_ptr< Handler > handleNotifications(std::shared_ptr< Notifications > notifications)=0
Register handler for notifications.
virtual void BlockDisconnected(const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
Notifies listeners of a block being disconnected.
CBlockIndex * pprev
pointer to the index of the predecessor of this block
#define TRY_LOCK(cs, name)
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...
std::atomic_bool fReindex
void Shutdown(NodeContext &node)
virtual uint256 getBlockHash(int height)=0
Get block hash. Height must be valid or this function will abort.
virtual CFeeRate mempoolMinFee()=0
Mempool minimum fee.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
virtual std::vector< util::SettingsValue > getSettingsList(const std::string &arg)=0
Get list of settings values.
virtual CBlockLocator getActiveChainLocator(const uint256 &block_hash)=0
Return a locator that refers to a block in the active chain.
virtual void rpcRunLater(const std::string &name, std::function< void()> fn, int64_t seconds)=0
Run function after given number of seconds. Cancel any previous calls with same name.
Options struct containing limit options for a CTxMemPool.
An in-memory indexed chain of blocks.
void appendCommand(const std::string &name, const CRPCCommand *pcmd)
Appends a CRPCCommand to the dispatch table.
virtual CFeeRate relayDustFee()=0
Relay dust fee setting (-dustrelayfee), reflecting lowest rate it's economical to spend...
const CBlockIndex * LastCommonAncestor(const CBlockIndex *pa, const CBlockIndex *pb)
Find the last common ancestor two blocks have.
bool GetProxy(enum Network net, Proxy &proxyInfoOut)
virtual bool isInitialBlockDownload()=0
Check if in IBD.
static constexpr unsigned int DEFAULT_MIN_RELAY_TX_FEE
Default for -minrelaytxfee, minimum relay fee for transactions.
bool removeCommand(const std::string &name, const CRPCCommand *pcmd)
::ExternalSigner m_signer
std::set< txiter, CompareIteratorByHash > setEntries
util::SettingsValue GetSetting(const std::string &arg) const
Get setting value.
MemPoolRemovalReason
Reason why a transaction was removed from the mempool, this is passed to the notification signal...
std::unique_ptr< Handler > MakeHandler(boost::signals2::connection connection)
Return handler wrapping a boost signal connection.
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
void StartMapPort(bool use_upnp, bool use_natpmp)
void RegisterSharedValidationInterface(std::shared_ptr< CValidationInterface > callbacks)
Register subscriber.
const CRPCCommand * m_wrapped_command
std::unique_ptr< Node > MakeNode(node::NodeContext &context)
Return implementation of Node interface.
void InitWarning(const bilingual_str &str)
Show warning message.
void RPCRunLater(const std::string &name, std::function< void()> func, int64_t nSeconds)
Run func nSeconds from now.
std::string m_name
Name of signer.
void UnregisterSharedValidationInterface(std::shared_ptr< CValidationInterface > callbacks)
Unregister subscriber.
auto FindKey(Map &&map, Key &&key) -> decltype(&map.at(key))
Map lookup helper.
virtual double guessVerificationProgress(const uint256 &block_hash)=0
Estimate fraction of total transactions verified if blocks up to the specified block hash are verifie...
Implement this to subscribe to events generated in validation.
CBlockLocator * m_locator
void RPCUnsetTimerInterface(RPCTimerInterface *iface)
Unset factory function for timers.
bool AppInitBasicSetup(const ArgsManager &args)
Initialize bitcoin core: Basic context setup.
RBFTransactionState
The rbf state of unconfirmed transactions.
CTxMemPoolEntry stores data about the corresponding transaction, as well as data about all in-mempool...
virtual void BlockConnected(const std::shared_ptr< const CBlock > &block, const CBlockIndex *pindex)
Notifies listeners of a block being connected.
int64_t CAmount
Amount in satoshis (Can be negative)
UniValue execute(const JSONRPCRequest &request) const
Execute a method.
virtual std::optional< int > findLocatorFork(const CBlockLocator &locator)=0
Return height of the highest block on chain in common with the locator, which will either be the orig...
uint256 GetBlockHash() const
virtual bool hasDescendantsInMempool(const uint256 &txid)=0
Check if transaction has descendants in mempool.
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...
NodeContext struct containing references to chain state and connection state.
virtual bool hasAssumedValidChain()=0
Return true if an assumed-valid chain is in use.
RBFTransactionState IsRBFOptInEmptyMempool(const CTransaction &tx)
virtual bool isInMempool(const uint256 &txid)=0
Check if transaction is in mempool.
virtual bool findAncestorByHeight(const uint256 &block_hash, int ancestor_height, const FoundBlock &ancestor_out={})=0
Find ancestor of block at specified height and optionally return ancestor information.
void Interrupt(NodeContext &node)
Interrupt threads.
virtual CFeeRate estimateSmartFee(int num_blocks, bool conservative, FeeCalculation *calc=nullptr)=0
Estimate smart fee.
bool InitError(const bilingual_str &str)
Show error message.
CTransactionRef GetSharedTx() const
const FoundBlock * m_next_block
virtual std::unique_ptr< Handler > handleRpc(const CRPCCommand &command)=0
Register handler for RPC.
virtual void UpdatedBlockTip(const CBlockIndex *pindexNew, const CBlockIndex *pindexFork, bool fInitialDownload)
Notifies listeners when the block chain tip advances.
std::map< std::string, std::vector< SettingsValue > > command_line_options
Map of setting name to list of command line values.
bool AppInitMain(NodeContext &node, interfaces::BlockAndHeaderTipInfo *tip_info)
Bitcoin core main initialization.
int64_t GetBlockTimeMax() const
virtual bool findBlock(const uint256 &hash, const FoundBlock &block={})=0
Return whether node has the block and optionally return block metadata or contents.
uint32_t GetCategoryMask() const
virtual void waitForNotificationsIfTipChanged(const uint256 &old_tip)=0
Wait for pending notifications to be processed unless block hash points to the current chain tip...
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.
virtual void requestMempoolTransactions(Notifications ¬ifications)=0
Synchronously send transactionAddedToMempool notifications about all current mempool transactions to ...
static CService ip(uint32_t i)
Block and header tip information.
#define WAIT_LOCK(cs, name)
static bool Enumerate(const std::string &command, std::vector< ExternalSigner > &signers, const std::string chain)
Obtain a list of signers.
std::shared_ptr< NotificationsProxy > m_proxy
Invalid wallet specified.
An outpoint - a combination of a transaction hash and an index n into its vout.
Wallet chain client that in addition to having chain client methods for starting up, shutting down, and registering RPCs, also has additional methods (called by the GUI) to load and create wallets.
bool IsDeprecatedRPCEnabled(const std::string &method)
#define WITH_LOCK(cs, code)
Run code while locking a mutex.
int64_t GetMedianTimePast() const
void FindCoins(const NodeContext &node, std::map< COutPoint, Coin > &coins)
Look up unspent output information.
External signer interface used by the GUI.
void RPCSetTimerInterfaceIfUnset(RPCTimerInterface *iface)
Set the factory function for timer, but only, if unset.
virtual void initWarning(const bilingual_str &message)=0
Send init warning.
Generic interface for managing an event handler or callback function registered with another interfac...
virtual node::NodeContext * context()
Get internal node context.
static constexpr unsigned int DUST_RELAY_TX_FEE
Min feerate for defining dust.
virtual bool isReadyToBroadcast()=0
Check if the node is ready to broadcast transactions.
virtual bool checkChainLimits(const CTransactionRef &tx)=0
Check if transaction will pass the mempool's chain limits.
std::unique_ptr< Chain > MakeChain(node::NodeContext &node)
Return implementation of Chain interface.
bilingual_str GetWarnings(bool verbose)
Format a string that describes several potential problems detected by the core.
bool WriteSettingsFile(std::vector< std::string > *errors=nullptr, bool backup=false) const
Write settings file or backup settings file.
virtual util::SettingsValue getRwSetting(const std::string &name)=0
Return <datadir>/settings.json setting value.
virtual bool findAncestorByHash(const uint256 &block_hash, const uint256 &ancestor_hash, const FoundBlock &ancestor_out={})=0
Return whether block descends from a specified ancestor, and optionally return ancestor information...
Interface giving clients (wallet processes, maybe other analysis tools in the future) ability to acce...
The block chain is a tree shaped structure starting with the genesis block at the root...
const CChainParams & Params()
Return the currently selected parameters.
int RPCSerializationFlags()
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...
std::string GetArg(const std::string &strArg, const std::string &strDefault) const
Return string argument or default value.
virtual bool updateRwSetting(const std::string &name, const util::SettingsValue &value, bool write=true)=0
Write a setting to <datadir>/settings.json.
virtual void initMessage(const std::string &message)=0
Send init message.
virtual util::SettingsValue getSetting(const std::string &arg)=0
Get settings value.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate...
bool AppInitParameterInteraction(const ArgsManager &args, bool use_syscall_sandbox)
Initialization: parameter interaction.
bool AppInitSanityChecks(const kernel::Context &kernel)
Initialization sanity checks.
Fee rate in satoshis per kilovirtualbyte: CAmount / kvB.
virtual RBFTransactionState isRBFOptIn(const CTransaction &tx)=0
Check if transaction is RBF opt in.
virtual bool hasBlocks(const uint256 &block_hash, int min_height=0, std::optional< int > max_height={})=0
Return true if data is available for all blocks in the specified range of blocks. ...
virtual void TransactionAddedToMempool(const CTransactionRef &tx, uint64_t mempool_sequence)
Notifies listeners of a transaction having been added to mempool.
void StartShutdown()
Request shutdown of the application.
virtual void showProgress(const std::string &title, int progress, bool resume_possible)=0
Send progress indicator.
std::map< CSubNet, CBanEntry > banmap_t
Wrapper around std::unique_lock style lock for Mutex.
virtual unsigned int estimateMaxBlocks()=0
Fee estimator max target.
CBlockLocator GetLocator(const CBlockIndex *index)
Get a locator for a block index entry.
virtual bool shutdownRequested()=0
Check if shutdown requested.
bool AppInitInterfaces(NodeContext &node)
Initialize node and wallet interface pointers.
interfaces::BlockInfo MakeBlockInfo(const CBlockIndex *index, const CBlock *data)
Return data from block index.
virtual void disconnect()=0
Disconnect the handler.
bool AppInitLockDataDirectory()
Lock bitcoin core data directory.
virtual bool broadcastTransaction(const CTransactionRef &tx, const CAmount &max_tx_fee, bool relay, std::string &err_string)=0
Transaction is added to memory pool, if the transaction fee is below the amount specified by max_tx_f...
The basic transaction that is broadcasted on the network and contained in blocks. ...
int nHeight
height of the entry in the chain. The genesis block has height 0
CBlockIndex * GetAncestor(int height)
Efficiently find an ancestor of this block.
std::map< std::string, SettingsValue > forced_settings
Map of setting name to forced setting value.
virtual CBlockLocator getTipLocator()=0
Get locator for the current chain tip.
void LockSettings(Fn &&fn)
Access settings with lock held.
full block available in blk*.dat
std::atomic_bool fImporting
util::SettingsValue GetPersistentSetting(const std::string &name) const
Get current setting from config file or read/write settings file, ignoring nonpersistent command line...
virtual bool rpcEnableDeprecated(const std::string &method)=0
Check if deprecated RPC is enabled.
std::vector< std::string > listCommands() const
Returns a list of registered commands.
std::vector< util::SettingsValue > GetSettingsList(const std::string &arg) const
Get list of setting values.
virtual void initError(const bilingual_str &message)=0
Send init error.
Top-level interface for a bitcoin node (bitcoind process).
virtual CFeeRate relayIncrementalFee()=0
Relay incremental fee setting (-incrementalrelayfee), reflecting cost of relay.
virtual CFeeRate relayMinFee()=0
Relay current minimum fee (from -minrelaytxfee and -incrementalrelayfee settings).
unsigned int nTx
Number of transactions in this block.
std::unique_ptr< ChainstateManager > chainman
static GenTxid Txid(const uint256 &hash)
void InitParameterInteraction(ArgsManager &args)
Parameter interaction: change current parameters depending on various rules.
virtual bool havePruned()=0
Check if any block has been pruned.
#define Assert(val)
Identity function.
std::shared_ptr< Chain::Notifications > m_notifications