 |
Bitcoin Core
22.99.0
P2P Digital Currency
|
Go to the documentation of this file.
65 const char* num = std::getenv(env_name.c_str());
74 static const std::string RANDOM_CTX_SEED{
"RANDOM_CTX_SEED"};
77 LogPrintf(
"%s: Setting random seed for current tests to %s=%s\n", __func__, RANDOM_CTX_SEED, seed.GetHex());
92 std::vector<const char*> arguments =
Cat(
96 "-logsourcelocations",
100 "-debugexclude=libevent",
101 "-debugexclude=leveldb",
117 throw std::runtime_error{
error};
134 static bool noui_connected =
false;
135 if (!noui_connected) {
137 noui_connected =
true;
168 constexpr
int script_check_threads = 2;
209 assert(!maybe_load_error.has_value());
218 static_cast<int64_t(*)()
>(
GetTime));
219 assert(!maybe_verify_error.has_value());
222 if (!
m_node.
chainman->ActiveChainstate().ActivateBestChain(state)) {
223 throw std::runtime_error(
strprintf(
"ActivateBestChain failed. (%s)", state.
ToString()));
226 m_node.
addrman = std::make_unique<AddrMan>(std::vector<bool>(),
245 constexpr std::array<unsigned char, 32> vchKey = {
246 {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}};
247 coinbaseKey.Set(vchKey.begin(), vchKey.end(),
true);
255 m_node.
chainman->ActiveChain().Tip()->GetBlockHash().ToString() ==
256 "571d80a9967ae599cec0448b0b0ba1cfb606f584d8069bd7166b86854ba7a191");
263 for (
int i = 0; i < num_blocks; i++) {
264 std::vector<CMutableTransaction> noTxns;
272 const std::vector<CMutableTransaction>& txns,
292 const std::vector<CMutableTransaction>& txns,
302 std::shared_ptr<const CBlock> shared_pblock = std::make_shared<const CBlock>(block);
312 CKey input_signing_key,
321 COutPoint outpoint_to_spend(input_transaction->GetHash(), input_vout);
322 CTxIn input(outpoint_to_spend);
323 mempool_txn.
vin.push_back(input);
326 CTxOut output(output_amount, output_destination);
327 mempool_txn.
vout.push_back(output);
332 keystore.
AddKey(input_signing_key);
336 AddCoins(coins_cache, *input_transaction.get(), input_height);
339 assert(coins_cache.
GetCoin(outpoint_to_spend, utxo_to_spend));
341 std::map<COutPoint, Coin> input_coins;
342 input_coins.insert({outpoint_to_spend, utxo_to_spend});
345 std::map<int, bilingual_str> input_errors;
376 CDataStream stream(
ParseHex(
"0100000090f0a9f110702f808219ebea1173056042a714bad51b916cb6800000000000005275289558f51c9966699404ae2294730c3c9f9bda53523ce50e9b95e558da2fdb261b4d4c86041b1ab1bf930901000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0146ffffffff0100f2052a01000000434104e18f7afbe4721580e81e8414fc8c24d7cfacf254bb5c7b949450c3e997c2dc1242487a8169507b631eb3771f2b425483fb13102c4eb5d858eef260fe70fbfae0ac00000000010000000196608ccbafa16abada902780da4dc35dafd7af05fa0da08cf833575f8cf9e836000000004a493046022100dab24889213caf43ae6adc41cf1c9396c08240c199f5225acf45416330fd7dbd022100fe37900e0644bf574493a07fc5edba06dbc07c311b947520c2d514bc5725dcb401ffffffff0100f2052a010000001976a914f15d1921f52e4007b146dfa60f369ed2fc393ce288ac000000000100000001fb766c1288458c2bafcfec81e48b24d98ec706de6b8af7c4e3c29419bfacb56d000000008c493046022100f268ba165ce0ad2e6d93f089cfcd3785de5c963bb5ea6b8c1b23f1ce3e517b9f022100da7c0f21adc6c401887f2bfd1922f11d76159cbc597fbd756a23dcbb00f4d7290141042b4e8625a96127826915a5b109852636ad0da753c9e1d5606a50480cd0c40f1f8b8d898235e571fe9357d9ec842bc4bba1827daaf4de06d71844d0057707966affffffff0280969800000000001976a9146963907531db72d0ed1a0cfb471ccb63923446f388ac80d6e34c000000001976a914f0688ba1c0d1ce182c7af6741e02658c7d4dfcd388ac000000000100000002c40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff010000008b483045022100f7edfd4b0aac404e5bab4fd3889e0c6c41aa8d0e6fa122316f68eddd0a65013902205b09cc8b2d56e1cd1f7f2fafd60a129ed94504c4ac7bdc67b56fe67512658b3e014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffffca5065ff9617cbcba45eb23726df6498a9b9cafed4f54cbab9d227b0035ddefb000000008a473044022068010362a13c7f9919fa832b2dee4e788f61f6f5d344a7c2a0da6ae740605658022006d1af525b9a14a35c003b78b72bd59738cd676f845d1ff3fc25049e01003614014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffff01001ec4110200000043410469ab4181eceb28985b9b4e895c13fa5e68d85761b7eee311db5addef76fa8621865134a221bd01f28ec9999ee3e021e60766e9d1f3458c115fb28650605f11c9ac000000000100000001cdaf2f758e91c514655e2dc50633d1e4c84989f8aa90a0dbc883f0d23ed5c2fa010000008b48304502207ab51be6f12a1962ba0aaaf24a20e0b69b27a94fac5adf45aa7d2d18ffd9236102210086ae728b370e5329eead9accd880d0cb070aea0c96255fae6c4f1ddcce1fd56e014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff02404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac002d3101000000001976a9141befba0cdc1ad56529371864d9f6cb042faa06b588ac000000000100000001b4a47603e71b61bc3326efd90111bf02d2f549b067f4c4a8fa183b57a0f800cb010000008a4730440220177c37f9a505c3f1a1f0ce2da777c339bd8339ffa02c7cb41f0a5804f473c9230220585b25a2ee80eb59292e52b987dad92acb0c64eced92ed9ee105ad153cdb12d001410443bd44f683467e549dae7d20d1d79cbdb6df985c6e9c029c8d0c6cb46cc1a4d3cf7923c5021b27f7a0b562ada113bc85d5fda5a1b41e87fe6e8802817cf69996ffffffff0280651406000000001976a9145505614859643ab7b547cd7f1f5e7e2a12322d3788ac00aa0271000000001976a914ea4720a7a52fc166c55ff2298e07baf70ae67e1b88ac00000000010000000586c62cd602d219bb60edb14a3e204de0705176f9022fe49a538054fb14abb49e010000008c493046022100f2bc2aba2534becbdf062eb993853a42bbbc282083d0daf9b4b585bd401aa8c9022100b1d7fd7ee0b95600db8535bbf331b19eed8d961f7a8e54159c53675d5f69df8c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff03ad0e58ccdac3df9dc28a218bcf6f1997b0a93306faaa4b3a28ae83447b2179010000008b483045022100be12b2937179da88599e27bb31c3525097a07cdb52422d165b3ca2f2020ffcf702200971b51f853a53d644ebae9ec8f3512e442b1bcb6c315a5b491d119d10624c83014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff2acfcab629bbc8685792603762c921580030ba144af553d271716a95089e107b010000008b483045022100fa579a840ac258871365dd48cd7552f96c8eea69bd00d84f05b283a0dab311e102207e3c0ee9234814cfbb1b659b83671618f45abc1326b9edcc77d552a4f2a805c0014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffdcdc6023bbc9944a658ddc588e61eacb737ddf0a3cd24f113b5a8634c517fcd2000000008b4830450221008d6df731df5d32267954bd7d2dda2302b74c6c2a6aa5c0ca64ecbabc1af03c75022010e55c571d65da7701ae2da1956c442df81bbf076cdbac25133f99d98a9ed34c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffe15557cd5ce258f479dfd6dc6514edf6d7ed5b21fcfa4a038fd69f06b83ac76e010000008b483045022023b3e0ab071eb11de2eb1cc3a67261b866f86bf6867d4558165f7c8c8aca2d86022100dc6e1f53a91de3efe8f63512850811f26284b62f850c70ca73ed5de8771fb451014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff01404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000010000000166d7577163c932b4f9690ca6a80b6e4eb001f0a2fa9023df5595602aae96ed8d000000008a4730440220262b42546302dfb654a229cefc86432b89628ff259dc87edd1154535b16a67e102207b4634c020a97c3e7bbd0d4d19da6aa2269ad9dded4026e896b213d73ca4b63f014104979b82d02226b3a4597523845754d44f13639e3bf2df5e82c6aab2bdc79687368b01b1ab8b19875ae3c90d661a3d0a33161dab29934edeb36aa01976be3baf8affffffff02404b4c00000000001976a9144854e695a02af0aeacb823ccbc272134561e0a1688ac40420f00000000001976a914abee93376d6b37b5c2940655a6fcaf1c8e74237988ac0000000001000000014e3f8ef2e91349a9059cb4f01e54ab2597c1387161d3da89919f7ea6acdbb371010000008c49304602210081f3183471a5ca22307c0800226f3ef9c353069e0773ac76bb580654d56aa523022100d4c56465bdc069060846f4fbf2f6b20520b2a80b08b168b31e66ddb9c694e240014104976c79848e18251612f8940875b2b08d06e6dc73b9840e8860c066b7e87432c477e9a59a453e71e6d76d5fe34058b800a098fc1740ce3012e8fc8a00c96af966ffffffff02c0e1e400000000001976a9144134e75a6fcb6042034aab5e18570cf1f844f54788ac404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000"),
SER_NETWORK,
PROTOCOL_VERSION);
std::unique_ptr< Chain > MakeChain(node::NodeContext &node)
Return implementation of Chain interface.
An input of a transaction.
bool fPruneMode
True if we're running in -prune mode.
CBlock CreateBlock(const std::vector< CMutableTransaction > &txns, const CScript &scriptPubKey, CChainState &chainstate)
Create a new block with just given transactions, coinbase paying to scriptPubKey.
bool GetBoolArg(const std::string &strArg, bool fDefault) const
Return boolean argument or default value.
void ClearPathCache()
Clear cached directory paths.
std::vector< unsigned char > ParseHex(const char *psz)
static const unsigned int DEFAULT_CHECKLEVEL
uint256 rand256() noexcept
generate a random uint256.
FastRandomContext g_insecure_rand_ctx
This global and the helpers that use it are not thread-safe.
static void SeedInsecureRand(SeedRand seed=SeedRand::SEED)
static const int COINBASE_MATURITY
Coinbase transaction outputs can only be spent after this number of new blocks (network rule)
void TraceThread(const char *thread_name, std::function< void()> thread_func)
A wrapper for do-something-once thread functions.
CMutableTransaction CreateValidMempoolTransaction(CTransactionRef input_transaction, int input_vout, int input_height, CKey input_signing_key, CScript output_destination, CAmount output_amount=CAmount(1 *COIN), bool submit=true)
Create a transaction and submit to the mempool.
TestingSetup(const std::string &chainName=CBaseChainParams::MAIN, const std::vector< const char * > &extra_args={})
void InitLogging(const ArgsManager &args)
Initialize global loggers.
std::unique_ptr< AddrMan > addrman
bool StartLogging()
Start logging (and flush all buffered messages)
const ResultType m_result_type
Result type.
V Cat(V v1, V &&v2)
Concatenate two vectors, moving elements.
Fillable signing provider that keeps keys in an address->secret map.
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
std::unique_ptr< PeerManager > peerman
ChainTestingSetup(const std::string &chainName=CBaseChainParams::MAIN, const std::vector< const char * > &extra_args={})
BasicTestingSetup(const std::string &chainName=CBaseChainParams::MAIN, const std::vector< const char * > &extra_args={})
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
static void RegisterAllCoreRPCCommands(CRPCTable &t)
int64_t GetTime()
DEPRECATED Use either GetTimeSeconds (not mockable) or GetTime<T> (mockable)
static CTransactionRef MakeTransactionRef(Tx &&txIn)
bool CheckProofOfWork(uint256 hash, unsigned int nBits, const Consensus::Params ¶ms)
Check whether a block hash satisfies the proof-of-work requirement specified by nBits.
const Consensus::Params & GetConsensus() const
static std::unique_ptr< PeerManager > make(const CChainParams &chainparams, CConnman &connman, AddrMan &addrman, BanMan *banman, ChainstateManager &chainman, CTxMemPool &pool, bool ignore_incoming_txs)
std::unique_ptr< CBlockPolicyEstimator > fee_estimator
static std::string PathToString(const path &path)
Convert path object to a byte string.
std::optional< ChainstateLoadVerifyError > VerifyLoadedChainstate(ChainstateManager &chainman, bool fReset, bool fReindexChainState, const Consensus::Params &consensus_params, unsigned int check_blocks, unsigned int check_level, std::function< int64_t()> get_unix_time_seconds)
std::shared_ptr< const CTransaction > CTransactionRef
std::unique_ptr< CTxMemPool > mempool
#define Assert(val)
Identity function.
const std::function< std::string(const char *)> G_TRANSLATION_FUN
Translate string to current locale using Qt.
virtual bool AddKey(const CKey &key)
std::string SHA256AutoDetect()
Autodetect the best available SHA256 implementation.
std::unique_ptr< BanMan > banman
void DisconnectTestLogger()
Only for testing.
void noui_connect()
Connect all bitcoind signal handlers.
CMainSignals & GetMainSignals()
std::string ToString() const
Abstract view on the open txout dataset.
node::CacheSizes m_cache_sizes
const fs::path & GetDataDirBase() const
Get data directory path.
CacheSizes CalculateCacheSizes(const ArgsManager &args, size_t n_indexes)
void AddCoins(CCoinsViewCache &cache, const CTransaction &tx, int nHeight, bool check_for_overwrite)
Utility function to add all of a transaction's outputs to a cache.
std::unique_ptr< CScheduler > scheduler
bool GetCoin(const COutPoint &outpoint, Coin &coin) const override
Retrieve the Coin (unspent transaction output) for a given outpoint.
void StartScriptCheckWorkerThreads(int threads_num)
Run instances of script checking worker threads.
std::ostream & operator<<(std::ostream &os, const uint256 &num)
std::vector< unsigned char > ToByteVector(const T &in)
std::atomic_bool fReindex
void ECC_Stop()
Deinitialize the elliptic curve support.
An output of a transaction.
void SetMockTime(int64_t nMockTimeIn)
DEPRECATED Use SetMockTime with chrono type.
void ThreadRename(std::string &&)
Rename a thread both in terms of an internal (in-memory) name as well as its system thread name.
void FlushBackgroundCallbacks()
Call any remaining callbacks on the calling thread.
uint256 GetRandHash() noexcept
static const std::string REGTEST
void ForceSetArg(const std::string &strArg, const std::string &strValue)
int64_t CAmount
Amount in satoshis (Can be negative)
std::unique_ptr< CBlockTemplate > CreateNewBlock(const CScript &scriptPubKeyIn)
Construct a new block template with coinbase to scriptPubKeyIn.
static uint256 GetUintFromEnv(const std::string &env_name)
Return the unsigned from the environment var if available, otherwise 0.
void SelectParams(const std::string &network)
Sets the params returned by Params() to those for the given chain name.
bool ParseParameters(int argc, const char *const argv[], std::string &error)
void RegisterBackgroundSignalScheduler(CScheduler &scheduler)
Register a CScheduler to give callbacks which should run in the background (may only be called once)
bool AppInitParameterInteraction(const ArgsManager &args)
Initialization: parameter interaction.
std::string ToString() const
uint256 uint256S(const char *str)
void Seed(FastRandomContext &ctx)
Seed the given random ctx or use the seed passed in via an environment var.
CChainState stores and provides an API to update our local knowledge of the current best chain.
CPubKey GetPubKey() const
Compute the public key from a private key.
Generate a new block, without valid proof-of-work.
void UnregisterBackgroundSignalScheduler()
Unregister a CScheduler to give callbacks which should run in the background - these callbacks will n...
CBlock CreateAndProcessBlock(const std::vector< CMutableTransaction > &txns, const CScript &scriptPubKey, CChainState *chainstate=nullptr)
Create a new block with just given transactions, coinbase paying to scriptPubKey, and try to add it t...
Serialized script, used inside transaction inputs and outputs.
TestChain100Setup(const std::vector< const char * > &extra_args={})
void InitSignatureCache()
std::vector< CTxOut > vout
void StopScriptCheckWorkerThreads()
Stop all of the script checking worker threads.
void ECC_Start()
Initialize the elliptic curve support.
std::vector< CTransactionRef > vtx
An encapsulated private key.
CCoinsView that adds a memory cache for transactions to another CCoinsView.
NetEventsInterface * m_msgproc
static constexpr unsigned int DEFAULT_MISBEHAVING_BANTIME
std::vector< CTransactionRef > m_coinbase_txns
static bool create_directories(const std::filesystem::path &p)
Create directory (and if necessary its parents), unless the leaf directory already exists or is a sym...
Validation result for a single transaction mempool acceptance.
void RegenerateCommitments(CBlock &block, ChainstateManager &chainman)
Update an old GenerateCoinbaseCommitment from CreateNewBlock after the block txs have changed.
void InitScriptExecutionCache()
Initializes the script-execution cache.
BCLog::Logger & LogInstance()
const CChainParams & Params()
Return the currently selected parameters.
std::string(const std::string &url_encoded) UrlDecodeFn
std::unique_ptr< ChainstateManager > chainman
void ClearArgs()
Clear available arguments.
std::list< std::function< void(const std::string &)> >::iterator PushBackCallback(std::function< void(const std::string &)> fun)
Connect a slot to the print signal and return the connection.
const fs::path m_path_root
Testing setup that configures a complete environment.
Double ended buffer combining vector and stream-like interfaces.
An outpoint - a combination of a transaction hash and an index n into its vout.
const std::function< std::vector< const char * >)> G_TEST_COMMAND_LINE_ARGUMENTS
Retrieve the command line arguments.
void SignTransaction(CMutableTransaction &mtx, const SigningProvider *keystore, const std::map< COutPoint, Coin > &coins, const UniValue &hashType, UniValue &result)
Sign a transaction with the given keystore and previous transactions.
CTxMemPoolEntry FromTx(const CMutableTransaction &tx) const
bool error(const char *fmt, const Args &... args)
UrlDecodeFn *const URL_DECODE
A mutable version of CTransaction.
const std::function< void(const std::string &)> G_TEST_LOG_FUN
This is connected to the logger.
void UnloadBlockIndex(CTxMemPool *mempool, ChainstateManager &chainman)
Unload database information.
RecursiveMutex cs_main
Mutex to guard access to validation specific variables, such as reading or changing the chainstate.
int64_t GetIntArg(const std::string &strArg, int64_t nDefault) const
Return integer argument or default value.
void SetupServerArgs(ArgsManager &argsman)
Register all arguments with the ArgsManager.
std::unique_ptr< CConnman > connman
bool g_parallel_script_checks
Whether there are dedicated script-checking threads running.
std::optional< ChainstateLoadingError > LoadChainstate(bool fReset, ChainstateManager &chainman, CTxMemPool *mempool, bool fPruneMode, const Consensus::Params &consensus_params, bool fReindexChainState, int64_t nBlockTreeDBCache, int64_t nCoinDBCache, int64_t nCoinCacheUsage, bool block_tree_db_in_memory, bool coins_db_in_memory, std::function< bool()> shutdown_requested, std::function< void()> coins_error_cb)
This sequence can have 4 types of outcomes:
void mineBlocks(int num_blocks)
Mine a series of new blocks on the active chain.
static FastRandomContext g_insecure_rand_ctx_temp_path
Random context to get unique temp data dirs.
Testing setup that performs all steps up until right before ChainstateManager gets initialized.
std::unique_ptr< interfaces::Chain > chain
static secp256k1_context * ctx
static const signed int DEFAULT_CHECKBLOCKS
static const int PROTOCOL_VERSION
network protocol versioning