Fabcoin Core
0.16.2
P2P Digital Currency
|
#include <validation.h>
#include <arith_uint256.h>
#include <chain.h>
#include <chainparams.h>
#include <checkpoints.h>
#include <checkqueue.h>
#include <consensus/consensus.h>
#include <consensus/merkle.h>
#include <consensus/tx_verify.h>
#include <consensus/validation.h>
#include <cuckoocache.h>
#include <fs.h>
#include <hash.h>
#include <init.h>
#include <policy/fees.h>
#include <policy/policy.h>
#include <policy/rbf.h>
#include <pow.h>
#include <primitives/block.h>
#include <primitives/transaction.h>
#include <random.h>
#include <reverse_iterator.h>
#include <script/script.h>
#include <script/sigcache.h>
#include <script/standard.h>
#include <timedata.h>
#include <tinyformat.h>
#include <txdb.h>
#include <txmempool.h>
#include <ui_interface.h>
#include <undo.h>
#include <util.h>
#include <utilmoneystr.h>
#include <utilstrencodings.h>
#include <validationinterface.h>
#include <versionbits.h>
#include <warnings.h>
#include <serialize.h>
#include <pubkey.h>
#include <key.h>
#include <wallet/wallet.h>
#include <atomic>
#include <sstream>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/thread.hpp>
#include <iostream>
#include <bitset>
#include <univalue.h>
Go to the source code of this file.
Classes | |
class | MemPoolConflictRemovalTracker |
class | WarningBitsConditionChecker |
Threshold condition checker that triggers when unknown versionbits are seen on the network. More... | |
struct | PerBlockConnectTrace |
class | ConnectTrace |
Used to track blocks whose transactions were applied to the UTXO state as a part of a single ActivateBestChainStep call. More... | |
class | CMainCleanup |
Namespaces | |
Consensus | |
Enumerations | |
enum | FlushStateMode { FLUSH_STATE_NONE, FLUSH_STATE_IF_NEEDED, FLUSH_STATE_PERIODIC, FLUSH_STATE_ALWAYS } |
enum | DisconnectResult { DISCONNECT_OK, DISCONNECT_UNCLEAN, DISCONNECT_FAILED } |
Functions | |
std::atomic_bool | fImporting (false) |
bool | IsFinalTx (const CTransaction &tx, int nBlockHeight, int64_t nBlockTime) |
Check if transaction is final and can be included in a block with the specified height and time. More... | |
std::pair< int, int64_t > | CalculateSequenceLocks (const CTransaction &tx, int flags, std::vector< int > *prevHeights, const CBlockIndex &block) |
Calculates the block height and previous block's median time past at which the transaction will be considered final in the context of BIP 68. More... | |
bool | EvaluateSequenceLocks (const CBlockIndex &block, std::pair< int, int64_t > lockPair) |
bool | SequenceLocks (const CTransaction &tx, int flags, std::vector< int > *prevHeights, const CBlockIndex &block) |
Check if transaction is final per BIP 68 sequence numbers and can be included in a block. More... | |
unsigned int | GetLegacySigOpCount (const CTransaction &tx) |
Auxiliary functions for transaction validation (ideally should not be exposed) More... | |
unsigned int | GetP2SHSigOpCount (const CTransaction &tx, const CCoinsViewCache &inputs) |
Count ECDSA signature operations in pay-to-script-hash inputs. More... | |
int64_t | GetTransactionSigOpCost (const CTransaction &tx, const CCoinsViewCache &inputs, int flags) |
Compute total signature operation cost of a transaction. More... | |
bool | CheckTransaction (const CTransaction &tx, CValidationState &state, bool fCheckDuplicateInputs) |
Transaction validation functions. More... | |
CBlockIndex * | FindForkInGlobalIndex (const CChain &chain, const CBlockLocator &locator) |
Find the last common block between the parameter chain and a locator. More... | |
bool | CheckInputs (const CTransaction &tx, CValidationState &state, const CCoinsViewCache &inputs, bool fScriptChecks, unsigned int flags, bool cacheSigStore, bool cacheFullScriptStore, PrecomputedTransactionData &txdata, std::vector< CScriptCheck > *pvChecks) |
Check whether all inputs of this transaction are valid (no double spends, scripts & sigs, amounts) This does not modify the UTXO set. More... | |
bool | CheckFinalTx (const CTransaction &tx, int flags) |
Check if transaction will be final in the next block to be created. More... | |
bool | TestLockPointValidity (const LockPoints *lp) |
Test whether the LockPoints height and time are still valid on the current chain. More... | |
bool | CheckSequenceLocks (const CTransaction &tx, int flags, LockPoints *lp, bool useExistingLockPoints) |
Check if transaction will be BIP 68 final in the next block to be created. More... | |
std::string | FormatStateMessage (const CValidationState &state) |
Convert CValidationState to a human-readable message for logging. More... | |
bool | IsFABHardForkEnabled (const CBlockIndex *pindexPrev, const Consensus::Params ¶ms) |
bool | IsFABHardForkEnabledForCurrentBlock (const Consensus::Params ¶ms) |
void | UpdateMempoolForReorg (DisconnectedBlockTransactions &disconnectpool, bool fAddToMempool) |
bool | IsConfirmedInNPrevBlocks (const CDiskTxPos &txindex, const CBlockIndex *pindexFrom, int nMaxDepth, int &nActualDepth) |
Check if the transaction is confirmed in N previous blocks. More... | |
bool | AcceptToMemoryPool (CTxMemPool &pool, CValidationState &state, const CTransactionRef &tx, bool fLimitFree, bool *pfMissingInputs, std::list< CTransactionRef > *plTxnReplaced, bool fOverrideMempoolLimit, const CAmount nAbsurdFee, bool rawTx) |
(try to) add transaction to memory pool plTxnReplaced will be appended to with all transactions replaced from mempool More... | |
bool | GetTransaction (const uint256 &hash, CTransactionRef &txOut, const Consensus::Params &consensusParams, uint256 &hashBlock, bool fAllowSlow) |
Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock. More... | |
template<typename Block > | |
bool | ReadBlockFromDisk (Block &block, const CDiskBlockPos &pos, const Consensus::Params &consensusParams) |
Functions for disk access for blocks. More... | |
bool | ReadBlockFromDisk (CBlock &block, const CBlockIndex *pindex, const Consensus::Params &consensusParams) |
bool | ReadFromDisk (CBlockHeader &block, unsigned int nFile, unsigned int nBlockPos) |
bool | ReadFromDisk (CMutableTransaction &tx, CDiskTxPos txindex) |
bool | ReadFromDisk (CMutableTransaction &tx, CDiskTxPos &txindex, CBlockTreeDB &txdb, COutPoint prevout) |
CAmount | GetBlockSubsidy (int nHeight, const Consensus::Params &consensusParams) |
bool | IsInitialBlockDownload () |
Check whether we are doing an initial block download (synchronizing from disk or network) More... | |
void | UpdateCoins (const CTransaction &tx, CCoinsViewCache &inputs, CTxUndo &txundo, int nHeight) |
void | UpdateCoins (const CTransaction &tx, CCoinsViewCache &inputs, int nHeight) |
Apply the effects of this transaction on the UTXO set represented by view. More... | |
int | GetSpendHeight (const CCoinsViewCache &inputs) |
Return the spend height, which is one more than the inputs.GetBestBlock(). More... | |
bool | Consensus::CheckTxInputs (const CTransaction &tx, CValidationState &state, const CCoinsViewCache &inputs, int nSpendHeight) |
Check whether all inputs of this transaction are valid (no double spends and amounts) This does not modify the UTXO set. More... | |
void | InitScriptExecutionCache () |
Initializes the script-execution cache. More... | |
int | ApplyTxInUndo (Coin &&undo, CCoinsViewCache &view, const COutPoint &out) |
Restore the UTXO in a Coin at a given COutPoint. More... | |
void | ThreadScriptCheck () |
Run an instance of the script checking thread. More... | |
int32_t | ComputeBlockVersion (const CBlockIndex *pindexPrev, const Consensus::Params ¶ms) |
Determine what nVersion a new block should use. More... | |
bool | FlushStateToDisk () |
Flush all state, indexes and buffers to disk. More... | |
void | PruneAndFlush () |
Prune block files and flush state to disk. More... | |
bool | CheckSenderScript (const CCoinsViewCache &view, const CTransaction &tx) |
std::vector< ResultExecute > | CallContract (const dev::Address &addrContract, std::vector< unsigned char > opcode, const dev::Address &sender, uint64_t gasLimit) |
bool | CheckMinGasPrice (std::vector< EthTransactionParams > &etps, const uint64_t &minGasPrice) |
bool | CheckReward (const CBlock &block, CValidationState &state, int nHeight, const Consensus::Params &consensusParams, CAmount nFees, CAmount gasRefunds, const std::vector< CTxOut > &vouts) |
valtype | GetSenderAddress (const CTransaction &tx, const CCoinsViewCache *coinsView, const std::vector< CTransactionRef > *blockTxs) |
UniValue | vmLogToJSON (const ResultExecute &execRes, const CTransaction &tx, const CBlock &block) |
void | writeVMlog (const std::vector< ResultExecute > &res, const CTransaction &tx, const CBlock &block) |
bool | ActivateBestChain (CValidationState &state, const CChainParams &chainparams, std::shared_ptr< const CBlock > pblock) |
Make the best chain active, in multiple steps. More... | |
bool | PreciousBlock (CValidationState &state, const CChainParams ¶ms, CBlockIndex *pindex) |
Mark a block as precious and reorganize. More... | |
bool | InvalidateBlock (CValidationState &state, const CChainParams &chainparams, CBlockIndex *pindex) |
Mark a block as invalid. More... | |
bool | ResetBlockFailureFlags (CBlockIndex *pindex) |
Remove invalidity status from a block and its descendants. More... | |
bool | CheckBlock (const CBlock &block, CValidationState &state, const Consensus::Params &consensusParams, bool fCheckPOW, bool fCheckMerkleRoot) |
Functions for validating blocks and updating the block tree. More... | |
bool | IsWitnessEnabled (const CBlockIndex *pindexPrev, const Consensus::Params ¶ms) |
Check whether witness commitments are required for block. More... | |
void | UpdateUncommittedBlockStructures (CBlock &block, const CBlockIndex *pindexPrev, const Consensus::Params &consensusParams) |
Update uncommitted block structures (currently: only the witness nonce). More... | |
std::vector< unsigned char > | GenerateCoinbaseCommitment (CBlock &block, const CBlockIndex *pindexPrev, const Consensus::Params &consensusParams) |
Produce the necessary coinbase commitment for a block (modifies the hash, don't call for mined blocks). More... | |
bool | ProcessNewBlockHeaders (const std::vector< CBlockHeader > &headers, CValidationState &state, const CChainParams &chainparams, const CBlockIndex **ppindex, CBlockHeader *first_invalid) |
Process incoming block headers. More... | |
bool | CheckCanonicalBlockSignature (const std::shared_ptr< const CBlock > pblock) |
bool | ProcessNewBlock (const CChainParams &chainparams, const std::shared_ptr< const CBlock > pblock, bool fForceProcessing, bool *fNewBlock) |
Process an incoming block. More... | |
bool | TestBlockValidity (CValidationState &state, const CChainParams &chainparams, 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, with cs_main held) More... | |
void | PruneOneBlockFile (const int fileNumber) |
Mark one block file as pruned. More... | |
void | UnlinkPrunedFiles (const std::set< int > &setFilesToPrune) |
Actually unlink the specified files. More... | |
void | PruneBlockFilesManual (int nManualPruneHeight) |
Prune block files up to a given height. More... | |
bool | CheckDiskSpace (uint64_t nAdditionalBytes) |
Check whether enough disk space is available for an incoming block. More... | |
FILE * | OpenBlockFile (const CDiskBlockPos &pos, bool fReadOnly) |
Open a block file (blk?????.dat) More... | |
fs::path | GetBlockPosFilename (const CDiskBlockPos &pos, const char *prefix) |
Translation to a filesystem path. More... | |
CBlockIndex * | InsertBlockIndex (uint256 hash) |
Create a new block index entry for a given block hash. More... | |
bool | LoadChainTip (const CChainParams &chainparams) |
Update the chain tip based on database information. More... | |
bool | ReplayBlocks (const CChainParams ¶ms, CCoinsView *view) |
Replay blocks that aren't fully applied to the database. More... | |
bool | RewindBlockIndex (const CChainParams ¶ms) |
When there are blocks in the active chain with missing data, rewind the chainstate and remove them from the block index. More... | |
void | UnloadBlockIndex () |
Unload database information. More... | |
bool | LoadBlockIndex (const CChainParams &chainparams) |
Load the block tree and coins database from disk, initializing state if we're running with -reindex. More... | |
bool | InitBlockIndex (const CChainParams &chainparams) |
Initialize a new block tree database + block data on disk. More... | |
bool | LoadGenesisBlock (const CChainParams &chainparams) |
Ensures we have a genesis block in the block tree, possibly writing one to disk. More... | |
bool | LoadExternalBlockFile (const CChainParams &chainparams, FILE *fileIn, CDiskBlockPos *dbp) |
Import blocks from an external file. More... | |
CBlockFileInfo * | GetBlockFileInfo (size_t n) |
Get block file info entry for one block file. More... | |
ThresholdState | VersionBitsTipState (const Consensus::Params ¶ms, Consensus::DeploymentPos pos) |
Get the BIP9 state for a given deployment at the current tip. More... | |
BIP9Stats | VersionBitsTipStatistics (const Consensus::Params ¶ms, Consensus::DeploymentPos pos) |
Get the numerical statistics for the BIP9 state for a given deployment at the current tip. More... | |
int | VersionBitsTipStateSinceHeight (const Consensus::Params ¶ms, Consensus::DeploymentPos pos) |
Get the block height at which the BIP9 deployment switched into the state for the block building on the current tip. More... | |
bool | LoadMempool (void) |
Load the mempool from disk. More... | |
void | DumpMempool (void) |
Dump the mempool to disk. More... | |
double | GuessVerificationProgress (const ChainTxData &data, CBlockIndex *pindex) |
Guess how far we are in the verification process at the given block index. More... | |
Variables | |
std::unique_ptr< FascState > | globalState |
Global state. More... | |
std::shared_ptr< dev::eth::SealEngineFace > | globalSealEngine |
bool | fRecordLogOpcodes = false |
bool | fIsVMlogFile = false |
bool | fGettingValuesDGP = false |
CCriticalSection | cs_main |
BlockMap | mapBlockIndex |
CChain | chainActive |
The currently-connected chain of blocks (protected by cs_main). More... | |
CBlockIndex * | pindexBestHeader = nullptr |
Best header we've seen so far (used for getheaders queries' starting points). More... | |
CWaitableCriticalSection | csBestBlock |
CConditionVariable | cvBlockChange |
int | nScriptCheckThreads = 0 |
bool | fReindex = false |
bool | fTxIndex = false |
bool | fLogEvents = false |
bool | fHavePruned = false |
Pruning-related variables and constants. More... | |
bool | fPruneMode = false |
True if we're running in -prune mode. More... | |
bool | fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG |
bool | fRequireStandard = true |
bool | fCheckBlockIndex = false |
bool | fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED |
size_t | nCoinCacheUsage = 5000 * 300 |
uint64_t | nPruneTarget = 0 |
Number of MiB of block files that we're trying to stay below. More... | |
int64_t | nMaxTipAge = DEFAULT_MAX_TIP_AGE |
If the tip is older than this (in seconds), the node is considered to be in initial block download. More... | |
bool | fEnableReplacement = DEFAULT_ENABLE_REPLACEMENT |
uint256 | hashAssumeValid |
Block hash whose ancestors we will assume to have valid scripts without checking them. More... | |
arith_uint256 | nMinimumChainWork |
Minimum work we will assume exists on some valid chain. More... | |
CFeeRate | minRelayTxFee = CFeeRate(DEFAULT_MIN_RELAY_TX_FEE) |
A fee rate smaller than this is considered zero fee (for relaying, mining and transaction creation) More... | |
CAmount | maxTxFee = DEFAULT_TRANSACTION_MAXFEE |
Absolute maximum transaction fee (in liu) used by wallet and mempool (rejects high fee in sendrawtransaction) More... | |
CBlockPolicyEstimator | feeEstimator |
CScript | COINBASE_FLAGS |
Constant stuff for coinbase transactions we create: More... | |
const std::string | strMessageMagic = "Bitcoin Signed Message:\n" |
CCoinsViewDB * | pcoinsdbview = nullptr |
Global variable that points to the coins database (protected by cs_main) More... | |
CCoinsViewCache * | pcoinsTip = nullptr |
Global variable that points to the active CCoinsView (protected by cs_main) More... | |
CBlockTreeDB * | pblocktree = nullptr |
Global variable that points to the active block tree (protected by cs_main) More... | |
StorageResults * | pstorageresult = nullptr |
CBlockIndex * | pindexBestForkTip = nullptr |
CBlockIndex * | pindexBestForkBase = nullptr |
VersionBitsCache | versionbitscache |
class CMainCleanup | instance_of_cmaincleanup |
enum DisconnectResult |
Enumerator | |
---|---|
DISCONNECT_OK | |
DISCONNECT_UNCLEAN | |
DISCONNECT_FAILED |
Definition at line 1668 of file validation.cpp.
enum FlushStateMode |
Enumerator | |
---|---|
FLUSH_STATE_NONE | |
FLUSH_STATE_IF_NEEDED | |
FLUSH_STATE_PERIODIC | |
FLUSH_STATE_ALWAYS |
Definition at line 256 of file validation.cpp.
bool AcceptToMemoryPool | ( | CTxMemPool & | pool, |
CValidationState & | state, | ||
const CTransactionRef & | tx, | ||
bool | fLimitFree, | ||
bool * | pfMissingInputs, | ||
std::list< CTransactionRef > * | plTxnReplaced, | ||
bool | fOverrideMempoolLimit, | ||
const CAmount | nAbsurdFee, | ||
bool | rawTx | ||
) |
(try to) add transaction to memory pool plTxnReplaced will be appended to with all transactions replaced from mempool
Definition at line 1096 of file validation.cpp.
bool ActivateBestChain | ( | CValidationState & | state, |
const CChainParams & | chainparams, | ||
std::shared_ptr< const CBlock > | pblock | ||
) |
Make the best chain active, in multiple steps.
Find the best known block, and make it the tip of the block chain.
The result is either failure or an activated best chain. pblock is either nullptr or a pointer to a block that is already loaded (to avoid loading it again from disk).
Definition at line 3370 of file validation.cpp.
int ApplyTxInUndo | ( | Coin && | undo, |
CCoinsViewCache & | view, | ||
const COutPoint & | out | ||
) |
Restore the UTXO in a Coin at a given COutPoint.
undo | The Coin to be restored. |
view | The coins view to which to apply the changes. |
out | The out point that corresponds to the tx input. |
Definition at line 1682 of file validation.cpp.
std::pair<int, int64_t> CalculateSequenceLocks | ( | const CTransaction & | tx, |
int | flags, | ||
std::vector< int > * | prevHeights, | ||
const CBlockIndex & | block | ||
) |
Calculates the block height and previous block's median time past at which the transaction will be considered final in the context of BIP 68.
Also removes from the vector of input heights any entries which did not correspond to sequence locked inputs as they do not affect the calculation.
Definition at line 32 of file tx_verify.cpp.
std::vector<ResultExecute> CallContract | ( | const dev::Address & | addrContract, |
std::vector< unsigned char > | opcode, | ||
const dev::Address & | sender, | ||
uint64_t | gasLimit | ||
) |
Definition at line 2689 of file validation.cpp.
bool CheckBlock | ( | const CBlock & | block, |
CValidationState & | state, | ||
const Consensus::Params & | consensusParams, | ||
bool | fCheckPOW = true , |
||
bool | fCheckMerkleRoot = true |
||
) |
Functions for validating blocks and updating the block tree.
Context-independent validity checks
Definition at line 3770 of file validation.cpp.
bool CheckCanonicalBlockSignature | ( | const std::shared_ptr< const CBlock > | pblock | ) |
bool CheckDiskSpace | ( | uint64_t | nAdditionalBytes | ) |
Check whether enough disk space is available for an incoming block.
Definition at line 4485 of file validation.cpp.
bool CheckFinalTx | ( | const CTransaction & | tx, |
int | flags = -1 |
||
) |
Check if transaction will be final in the next block to be created.
Calls IsFinalTx() with current block height and appropriate block time.
See consensus/consensus.h for flag definitions.
Definition at line 271 of file validation.cpp.
bool CheckInputs | ( | const CTransaction & | tx, |
CValidationState & | state, | ||
const CCoinsViewCache & | inputs, | ||
bool | fScriptChecks, | ||
unsigned int | flags, | ||
bool | cacheSigStore, | ||
bool | cacheFullScriptStore, | ||
PrecomputedTransactionData & | txdata, | ||
std::vector< CScriptCheck > * | pvChecks | ||
) |
Check whether all inputs of this transaction are valid (no double spends, scripts & sigs, amounts) This does not modify the UTXO set.
If pvChecks is not nullptr, script checks are pushed onto it instead of being performed inline. Any script checks which are not necessary (eg due to script execution cache hits) are, obviously, not pushed onto pvChecks/run.
Setting cacheSigStore/cacheFullScriptStore to false will remove elements from the corresponding cache which are matched. This is useful for checking blocks where we will likely never need the cache entry again.
Non-static (and re-declared) in src/test/txvalidationcache_tests.cpp
Definition at line 1505 of file validation.cpp.
bool CheckMinGasPrice | ( | std::vector< EthTransactionParams > & | etps, |
const uint64_t & | minGasPrice | ||
) |
bool CheckReward | ( | const CBlock & | block, |
CValidationState & | state, | ||
int | nHeight, | ||
const Consensus::Params & | consensusParams, | ||
CAmount | nFees, | ||
CAmount | gasRefunds, | ||
const std::vector< CTxOut > & | vouts | ||
) |
Definition at line 2728 of file validation.cpp.
bool CheckSenderScript | ( | const CCoinsViewCache & | view, |
const CTransaction & | tx | ||
) |
Definition at line 2681 of file validation.cpp.
bool CheckSequenceLocks | ( | const CTransaction & | tx, |
int | flags, | ||
LockPoints * | lp = nullptr , |
||
bool | useExistingLockPoints = false |
||
) |
Check if transaction will be BIP 68 final in the next block to be created.
Simulates calling SequenceLocks() with data from the tip of the current active chain. Optionally stores in LockPoints the resulting height and time calculated and the hash of the block needed for calculation or skips the calculation and uses the LockPoints passed in for evaluation. The LockPoints should not be considered valid if CheckSequenceLocks returns false.
See consensus/consensus.h for flag definitions.
Definition at line 321 of file validation.cpp.
bool CheckTransaction | ( | const CTransaction & | tx, |
CValidationState & | state, | ||
bool | fCheckDuplicateInputs | ||
) |
Transaction validation functions.
Context-independent validity checks
!!? if (GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION | SERIALIZE_TRANSACTION_NO_WITNESS) * WITNESS_SCALE_FACTOR > MAX_BLOCK_WEIGHT)
Definition at line 161 of file tx_verify.cpp.
int32_t ComputeBlockVersion | ( | const CBlockIndex * | pindexPrev, |
const Consensus::Params & | params | ||
) |
Determine what nVersion a new block should use.
Definition at line 1820 of file validation.cpp.
void DumpMempool | ( | ) |
Dump the mempool to disk.
Definition at line 5543 of file validation.cpp.
bool EvaluateSequenceLocks | ( | const CBlockIndex & | block, |
std::pair< int, int64_t > | lockPair | ||
) |
Definition at line 94 of file tx_verify.cpp.
std::atomic_bool fImporting | ( | false | ) |
CBlockIndex* FindForkInGlobalIndex | ( | const CChain & | chain, |
const CBlockLocator & | locator | ||
) |
Find the last common block between the parameter chain and a locator.
Definition at line 233 of file validation.cpp.
bool FlushStateToDisk | ( | ) |
Flush all state, indexes and buffers to disk.
Definition at line 2543 of file validation.cpp.
std::string FormatStateMessage | ( | const CValidationState & | state | ) |
Convert CValidationState to a human-readable message for logging.
Definition at line 407 of file validation.cpp.
std::vector<unsigned char> GenerateCoinbaseCommitment | ( | CBlock & | block, |
const CBlockIndex * | pindexPrev, | ||
const Consensus::Params & | consensusParams | ||
) |
Produce the necessary coinbase commitment for a block (modifies the hash, don't call for mined blocks).
Definition at line 3877 of file validation.cpp.
CBlockFileInfo* GetBlockFileInfo | ( | size_t | n | ) |
Get block file info entry for one block file.
Definition at line 5452 of file validation.cpp.
fs::path GetBlockPosFilename | ( | const CDiskBlockPos & | pos, |
const char * | prefix | ||
) |
Translation to a filesystem path.
Definition at line 4528 of file validation.cpp.
CAmount GetBlockSubsidy | ( | int | nHeight, |
const Consensus::Params & | consensusParams | ||
) |
Definition at line 1270 of file validation.cpp.
unsigned int GetLegacySigOpCount | ( | const CTransaction & | tx | ) |
Auxiliary functions for transaction validation (ideally should not be exposed)
Count ECDSA signature operations the old-fashioned (pre-0.6) way
Definition at line 109 of file tx_verify.cpp.
unsigned int GetP2SHSigOpCount | ( | const CTransaction & | tx, |
const CCoinsViewCache & | inputs | ||
) |
Count ECDSA signature operations in pay-to-script-hash inputs.
[in] | mapInputs | Map of previous transactions that have outputs we're spending |
Definition at line 123 of file tx_verify.cpp.
valtype GetSenderAddress | ( | const CTransaction & | tx, |
const CCoinsViewCache * | coinsView, | ||
const std::vector< CTransactionRef > * | blockTxs | ||
) |
Definition at line 2752 of file validation.cpp.
int GetSpendHeight | ( | const CCoinsViewCache & | inputs | ) |
Return the spend height, which is one more than the inputs.GetBestBlock().
While checking, GetBestBlock() refers to the parent block. (protected by cs_main) This is also true for mempool checks.
Definition at line 1468 of file validation.cpp.
bool GetTransaction | ( | const uint256 & | hash, |
CTransactionRef & | txOut, | ||
const Consensus::Params & | consensusParams, | ||
uint256 & | hashBlock, | ||
bool | fAllowSlow | ||
) |
Return transaction in txOut, and if it was found inside a block, its hash is placed in hashBlock.
Retrieve a transaction (from memory pool, or from disk, if possible)
Definition at line 1105 of file validation.cpp.
int64_t GetTransactionSigOpCost | ( | const CTransaction & | tx, |
const CCoinsViewCache & | inputs, | ||
int | flags | ||
) |
Compute total signature operation cost of a transaction.
[in] | tx | Transaction for which we are computing the cost |
[in] | inputs | Map of previous transactions that have outputs we're spending |
[out] | flags | Script verification flags |
Definition at line 140 of file tx_verify.cpp.
double GuessVerificationProgress | ( | const ChainTxData & | data, |
CBlockIndex * | pindex | ||
) |
Guess how far we are in the verification process at the given block index.
Guess verification progress (as a fraction between 0.0=genesis and 1.0=current tip).
Definition at line 5591 of file validation.cpp.
bool InitBlockIndex | ( | const CChainParams & | chainparams | ) |
Initialize a new block tree database + block data on disk.
Definition at line 5067 of file validation.cpp.
void InitScriptExecutionCache | ( | ) |
Initializes the script-execution cache.
Definition at line 1482 of file validation.cpp.
CBlockIndex* InsertBlockIndex | ( | uint256 | hash | ) |
Create a new block index entry for a given block hash.
Definition at line 4533 of file validation.cpp.
bool InvalidateBlock | ( | CValidationState & | state, |
const CChainParams & | chainparams, | ||
CBlockIndex * | pindex | ||
) |
Mark a block as invalid.
Definition at line 3471 of file validation.cpp.
bool IsConfirmedInNPrevBlocks | ( | const CDiskTxPos & | txindex, |
const CBlockIndex * | pindexFrom, | ||
int | nMaxDepth, | ||
int & | nActualDepth | ||
) |
Check if the transaction is confirmed in N previous blocks.
Definition at line 1083 of file validation.cpp.
bool IsFABHardForkEnabled | ( | const CBlockIndex * | pindexPrev, |
const Consensus::Params & | params | ||
) |
bool IsFABHardForkEnabledForCurrentBlock | ( | const Consensus::Params & | params | ) |
bool IsFinalTx | ( | const CTransaction & | tx, |
int | nBlockHeight, | ||
int64_t | nBlockTime | ||
) |
Check if transaction is final and can be included in a block with the specified height and time.
Consensus critical.
Definition at line 19 of file tx_verify.cpp.
bool IsInitialBlockDownload | ( | ) |
Check whether we are doing an initial block download (synchronizing from disk or network)
Definition at line 1295 of file validation.cpp.
bool IsWitnessEnabled | ( | const CBlockIndex * | pindexPrev, |
const Consensus::Params & | params | ||
) |
Check whether witness commitments are required for block.
Definition at line 3844 of file validation.cpp.
bool LoadBlockIndex | ( | const CChainParams & | chainparams | ) |
Load the block tree and coins database from disk, initializing state if we're running with -reindex.
Definition at line 5037 of file validation.cpp.
bool LoadChainTip | ( | const CChainParams & | chainparams | ) |
Update the chain tip based on database information.
Definition at line 4671 of file validation.cpp.
bool LoadExternalBlockFile | ( | const CChainParams & | chainparams, |
FILE * | fileIn, | ||
CDiskBlockPos * | dbp | ||
) |
Import blocks from an external file.
Definition at line 5143 of file validation.cpp.
bool LoadGenesisBlock | ( | const CChainParams & | chainparams | ) |
Ensures we have a genesis block in the block tree, possibly writing one to disk.
Definition at line 5111 of file validation.cpp.
bool LoadMempool | ( | ) |
Load the mempool from disk.
Definition at line 5477 of file validation.cpp.
FILE* OpenBlockFile | ( | const CDiskBlockPos & | pos, |
bool | fReadOnly | ||
) |
Open a block file (blk?????.dat)
Definition at line 4519 of file validation.cpp.
bool PreciousBlock | ( | CValidationState & | state, |
const CChainParams & | params, | ||
CBlockIndex * | pindex | ||
) |
Mark a block as precious and reorganize.
Definition at line 3442 of file validation.cpp.
bool ProcessNewBlock | ( | const CChainParams & | chainparams, |
const std::shared_ptr< const CBlock > | pblock, | ||
bool | fForceProcessing, | ||
bool * | fNewBlock | ||
) |
Process an incoming block.
This only returns after the best known valid block is made active. Note that it does not, however, guarantee that the specific block passed to it has been checked for validity!
If you want to possibly get feedback on whether pblock is valid, you must install a CValidationInterface (see validationinterface.h) - this will have its BlockChecked method called whenever any block completes validation.
Note that we guarantee that either the proof-of-work is valid on pblock, or (and possibly also) BlockChecked will have been called.
Call without cs_main held.
[in] | pblock | The block we want to process. |
[in] | fForceProcessing | Process this block even if unrequested; used for non-network block sources and whitelisted peers. |
[out] | fNewBlock | A boolean which is set to indicate if the block was first received via this call |
Definition at line 4261 of file validation.cpp.
bool ProcessNewBlockHeaders | ( | const std::vector< CBlockHeader > & | block, |
CValidationState & | state, | ||
const CChainParams & | chainparams, | ||
const CBlockIndex ** | ppindex = nullptr , |
||
CBlockHeader * | first_invalid = nullptr |
||
) |
Process incoming block headers.
Call without cs_main held.
[in] | block | The block headers themselves |
[out] | state | This may be set to an Error state if any error occurred processing them |
[in] | chainparams | The params for the chain we want to connect to |
[out] | ppindex | If set, the pointer will be set to point to the last new block index object for the given headers |
[out] | first_invalid | First header that fails validation, if one exists |
Definition at line 4122 of file validation.cpp.
void PruneAndFlush | ( | ) |
Prune block files and flush state to disk.
Definition at line 2549 of file validation.cpp.
void PruneBlockFilesManual | ( | int | nManualPruneHeight | ) |
Prune block files up to a given height.
Definition at line 4416 of file validation.cpp.
void PruneOneBlockFile | ( | const int | fileNumber | ) |
Mark one block file as pruned.
Definition at line 4351 of file validation.cpp.
bool ReadBlockFromDisk | ( | Block & | block, |
const CDiskBlockPos & | pos, | ||
const Consensus::Params & | consensusParams | ||
) |
Functions for disk access for blocks.
Definition at line 1191 of file validation.cpp.
bool ReadBlockFromDisk | ( | CBlock & | block, |
const CBlockIndex * | pindex, | ||
const Consensus::Params & | consensusParams | ||
) |
bool ReadFromDisk | ( | CBlockHeader & | block, |
unsigned int | nFile, | ||
unsigned int | nBlockPos | ||
) |
Definition at line 1232 of file validation.cpp.
bool ReadFromDisk | ( | CMutableTransaction & | tx, |
CDiskTxPos | txindex | ||
) |
bool ReadFromDisk | ( | CMutableTransaction & | tx, |
CDiskTxPos & | txindex, | ||
CBlockTreeDB & | txdb, | ||
COutPoint | prevout | ||
) |
bool ReplayBlocks | ( | const CChainParams & | params, |
CCoinsView * | view | ||
) |
Replay blocks that aren't fully applied to the database.
Definition at line 4848 of file validation.cpp.
bool ResetBlockFailureFlags | ( | CBlockIndex * | pindex | ) |
Remove invalidity status from a block and its descendants.
Definition at line 3541 of file validation.cpp.
bool RewindBlockIndex | ( | const CChainParams & | params | ) |
When there are blocks in the active chain with missing data, rewind the chainstate and remove them from the block index.
Definition at line 4914 of file validation.cpp.
bool SequenceLocks | ( | const CTransaction & | tx, |
int | flags, | ||
std::vector< int > * | prevHeights, | ||
const CBlockIndex & | block | ||
) |
Check if transaction is final per BIP 68 sequence numbers and can be included in a block.
Consensus critical. Takes as input a list of heights at which tx's inputs (in order) confirmed.
Definition at line 104 of file tx_verify.cpp.
bool TestBlockValidity | ( | CValidationState & | state, |
const CChainParams & | chainparams, | ||
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, with cs_main held)
Definition at line 4304 of file validation.cpp.
bool TestLockPointValidity | ( | const LockPoints * | lp | ) |
Test whether the LockPoints height and time are still valid on the current chain.
Definition at line 303 of file validation.cpp.
void ThreadScriptCheck | ( | ) |
Run an instance of the script checking thread.
Definition at line 1812 of file validation.cpp.
void UnlinkPrunedFiles | ( | const std::set< int > & | setFilesToPrune | ) |
Actually unlink the specified files.
Definition at line 4383 of file validation.cpp.
void UnloadBlockIndex | ( | ) |
Unload database information.
Definition at line 5010 of file validation.cpp.
void UpdateCoins | ( | const CTransaction & | tx, |
CCoinsViewCache & | inputs, | ||
CTxUndo & | txundo, | ||
int | nHeight | ||
) |
Definition at line 1441 of file validation.cpp.
void UpdateCoins | ( | const CTransaction & | tx, |
CCoinsViewCache & | inputs, | ||
int | nHeight | ||
) |
Apply the effects of this transaction on the UTXO set represented by view.
Definition at line 1456 of file validation.cpp.
void UpdateMempoolForReorg | ( | DisconnectedBlockTransactions & | disconnectpool, |
bool | fAddToMempool | ||
) |
void UpdateUncommittedBlockStructures | ( | CBlock & | block, |
const CBlockIndex * | pindexPrev, | ||
const Consensus::Params & | consensusParams | ||
) |
Update uncommitted block structures (currently: only the witness nonce).
This is safe for submitted blocks.
Definition at line 3865 of file validation.cpp.
ThresholdState VersionBitsTipState | ( | const Consensus::Params & | params, |
Consensus::DeploymentPos | pos | ||
) |
Get the BIP9 state for a given deployment at the current tip.
Definition at line 5457 of file validation.cpp.
int VersionBitsTipStateSinceHeight | ( | const Consensus::Params & | params, |
Consensus::DeploymentPos | pos | ||
) |
Get the block height at which the BIP9 deployment switched into the state for the block building on the current tip.
Definition at line 5469 of file validation.cpp.
BIP9Stats VersionBitsTipStatistics | ( | const Consensus::Params & | params, |
Consensus::DeploymentPos | pos | ||
) |
Get the numerical statistics for the BIP9 state for a given deployment at the current tip.
Definition at line 5463 of file validation.cpp.
UniValue vmLogToJSON | ( | const ResultExecute & | execRes, |
const CTransaction & | tx, | ||
const CBlock & | block | ||
) |
Definition at line 2795 of file validation.cpp.
void writeVMlog | ( | const std::vector< ResultExecute > & | res, |
const CTransaction & | tx, | ||
const CBlock & | block | ||
) |
Definition at line 2830 of file validation.cpp.
CChain chainActive |
The currently-connected chain of blocks (protected by cs_main).
Definition at line 80 of file validation.cpp.
CScript COINBASE_FLAGS |
Constant stuff for coinbase transactions we create:
Definition at line 113 of file validation.cpp.
CCriticalSection cs_main |
Definition at line 77 of file validation.cpp.
CWaitableCriticalSection csBestBlock |
Definition at line 82 of file validation.cpp.
CConditionVariable cvBlockChange |
Definition at line 83 of file validation.cpp.
bool fCheckBlockIndex = false |
Definition at line 93 of file validation.cpp.
bool fCheckpointsEnabled = DEFAULT_CHECKPOINTS_ENABLED |
Definition at line 94 of file validation.cpp.
CTxMemPool mempool & feeEstimator |
Definition at line 106 of file validation.cpp.
bool fEnableReplacement = DEFAULT_ENABLE_REPLACEMENT |
Definition at line 98 of file validation.cpp.
bool fGettingValuesDGP = false |
Definition at line 74 of file validation.cpp.
bool fHavePruned = false |
Pruning-related variables and constants.
True if any block files have ever been pruned.
Definition at line 89 of file validation.cpp.
bool fIsBareMultisigStd = DEFAULT_PERMIT_BAREMULTISIG |
Definition at line 91 of file validation.cpp.
bool fIsVMlogFile = false |
Definition at line 73 of file validation.cpp.
bool fLogEvents = false |
Definition at line 88 of file validation.cpp.
bool fPruneMode = false |
True if we're running in -prune mode.
Definition at line 90 of file validation.cpp.
bool fRecordLogOpcodes = false |
Definition at line 72 of file validation.cpp.
bool fReindex = false |
Definition at line 86 of file validation.cpp.
bool fRequireStandard = true |
Definition at line 92 of file validation.cpp.
bool fTxIndex = false |
Definition at line 87 of file validation.cpp.
std::shared_ptr<dev::eth::SealEngineFace> globalSealEngine |
Definition at line 71 of file validation.cpp.
std::unique_ptr<FascState> globalState |
Global state.
Definition at line 70 of file validation.cpp.
uint256 hashAssumeValid |
Block hash whose ancestors we will assume to have valid scripts without checking them.
Definition at line 100 of file validation.cpp.
class CMainCleanup instance_of_cmaincleanup |
BlockMap mapBlockIndex |
Definition at line 79 of file validation.cpp.
CAmount maxTxFee = DEFAULT_TRANSACTION_MAXFEE |
Absolute maximum transaction fee (in liu) used by wallet and mempool (rejects high fee in sendrawtransaction)
Definition at line 104 of file validation.cpp.
A fee rate smaller than this is considered zero fee (for relaying, mining and transaction creation)
Definition at line 103 of file validation.cpp.
size_t nCoinCacheUsage = 5000 * 300 |
Definition at line 95 of file validation.cpp.
int64_t nMaxTipAge = DEFAULT_MAX_TIP_AGE |
If the tip is older than this (in seconds), the node is considered to be in initial block download.
Definition at line 97 of file validation.cpp.
arith_uint256 nMinimumChainWork |
Minimum work we will assume exists on some valid chain.
Definition at line 101 of file validation.cpp.
uint64_t nPruneTarget = 0 |
Number of MiB of block files that we're trying to stay below.
Definition at line 96 of file validation.cpp.
int nScriptCheckThreads = 0 |
Definition at line 84 of file validation.cpp.
CBlockTreeDB* pblocktree = nullptr |
Global variable that points to the active block tree (protected by cs_main)
Definition at line 253 of file validation.cpp.
CCoinsViewDB* pcoinsdbview = nullptr |
Global variable that points to the coins database (protected by cs_main)
Definition at line 251 of file validation.cpp.
CCoinsViewCache* pcoinsTip = nullptr |
Global variable that points to the active CCoinsView (protected by cs_main)
Definition at line 252 of file validation.cpp.
CBlockIndex * pindexBestForkBase = nullptr |
Definition at line 1321 of file validation.cpp.
CBlockIndex* pindexBestForkTip = nullptr |
Definition at line 1321 of file validation.cpp.
CBlockIndex* pindexBestHeader = nullptr |
Best header we've seen so far (used for getheaders queries' starting points).
Definition at line 81 of file validation.cpp.
StorageResults* pstorageresult = nullptr |
Definition at line 254 of file validation.cpp.
const std::string strMessageMagic = "Bitcoin Signed Message:\n" |
Definition at line 115 of file validation.cpp.
VersionBitsCache versionbitscache |
Definition at line 1818 of file validation.cpp.