42 txNew.
vin[0].scriptSig =
CScript() << 486604799 <<
CScriptNum(4) << std::vector<unsigned char>((
const unsigned char*)pszTimestamp, (
const unsigned char*)pszTimestamp + strlen(pszTimestamp));
43 txNew.
vout[0].nValue = genesisReward;
44 txNew.
vout[0].scriptPubKey = genesisOutputScript;
47 genesis.
nTime = nTime;
48 genesis.
nBits = nBits;
70 const char* pszTimestamp =
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
71 const CScript genesisOutputScript =
CScript() <<
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f"_hex <<
OP_CHECKSIG;
72 return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
84 consensus.nSubsidyHalvingInterval = 210000;
90 consensus.BIP34Hash =
uint256{
"000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8"};
96 consensus.powLimit =
uint256{
"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
97 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60;
99 consensus.fPowAllowMinDifficultyBlocks =
false;
117 consensus.nMinimumChainWork =
uint256{
"0000000000000000000000000000000000000001128750f82f4c366153a3a030"};
118 consensus.defaultAssumeValid =
uint256{
"00000000000000000000ccebd6d74d9194d8dcdc1d177c478e094bfad51ba5ac"};
136 assert(
consensus.hashGenesisBlock ==
uint256{
"000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f"});
137 assert(
genesis.hashMerkleRoot ==
uint256{
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"});
144 vSeeds.emplace_back(
"seed.bitcoin.sipa.be.");
145 vSeeds.emplace_back(
"dnsseed.bluematt.me.");
146 vSeeds.emplace_back(
"seed.bitcoin.jonasschnelli.ch.");
147 vSeeds.emplace_back(
"seed.btc.petertodd.net.");
148 vSeeds.emplace_back(
"seed.bitcoin.sprovoost.nl.");
149 vSeeds.emplace_back(
"dnsseed.emzy.de.");
150 vSeeds.emplace_back(
"seed.bitcoin.wiz.biz.");
151 vSeeds.emplace_back(
"seed.mainnet.achownodes.xyz.");
169 .hash_serialized =
AssumeutxoHash{
uint256{
"a2a5521b1b5ab65f67818e5e8eccabb7171a517f9e2382208f77687310768f96"}},
170 .m_chain_tx_count = 991032194,
171 .blockhash =
uint256{
"0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5"},
175 .hash_serialized =
AssumeutxoHash{
uint256{
"dbd190983eaf433ef7c15f78a278ae42c00ef52e0fd2a54953782175fbadcea9"}},
176 .m_chain_tx_count = 1145604538,
177 .blockhash =
uint256{
"000000000000000000010b17283c3c400507969a9c2afd1dcf2082ec5cca2880"},
181 .hash_serialized =
AssumeutxoHash{
uint256{
"4daf8a17b4902498c5787966a2b51c613acdab5df5db73f196fa59a4da2f1568"}},
182 .m_chain_tx_count = 1226586151,
183 .blockhash =
uint256{
"0000000000000000000108970acb9522ffd516eae17acddcb1bd16469194a821"},
187 .hash_serialized =
AssumeutxoHash{
uint256{
"e4b90ef9eae834f56c4b64d2d50143cee10ad87994c614d7d04125e2a6025050"}},
188 .m_chain_tx_count = 1305397408,
189 .blockhash =
uint256{
"0000000000000000000147034958af1652b2b91bba607beacc5e72a56f0fb5ee"},
196 .tx_count = 1315805869,
197 .dTxRate = 5.40111006496122,
202 .commitment_period = 641,
203 .redownload_buffer_size = 15218,
217 consensus.nSubsidyHalvingInterval = 210000;
218 consensus.script_flag_exceptions.emplace(
221 consensus.BIP34Hash =
uint256{
"0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"};
227 consensus.powLimit =
uint256{
"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
228 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60;
230 consensus.fPowAllowMinDifficultyBlocks =
true;
248 consensus.nMinimumChainWork =
uint256{
"0000000000000000000000000000000000000000000017dde1c649f3708d14b6"};
249 consensus.defaultAssumeValid =
uint256{
"000000007a61e4230b28ac5cb6b5e5a0130de37ac1faf2f8987d2fa6505b67f4"};
262 assert(
consensus.hashGenesisBlock ==
uint256{
"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"});
263 assert(
genesis.hashMerkleRoot ==
uint256{
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"});
268 vSeeds.emplace_back(
"testnet-seed.bitcoin.jonasschnelli.ch.");
269 vSeeds.emplace_back(
"seed.tbtc.petertodd.net.");
270 vSeeds.emplace_back(
"seed.testnet.bitcoin.sprovoost.nl.");
271 vSeeds.emplace_back(
"testnet-seed.bluematt.me.");
272 vSeeds.emplace_back(
"seed.testnet.achownodes.xyz.");
290 .hash_serialized =
AssumeutxoHash{
uint256{
"f841584909f68e47897952345234e37fcd9128cd818f41ee6c3ca68db8071be7"}},
291 .m_chain_tx_count = 66484552,
292 .blockhash =
uint256{
"0000000000000093bcb68c03a9a168ae252572d348a2eaeba2cdf9231d73206f"},
296 .hash_serialized =
AssumeutxoHash{
uint256{
"ce6bb677bb2ee9789c4a1c9d73e6683c53fc20e8fdbedbdaaf468982a0c8db2a"}},
297 .m_chain_tx_count = 536078574,
298 .blockhash =
uint256{
"00000000000000f4971a7fb37fbdff89315b69a2e1920c467654a382f0d64786"},
305 .tx_count = 536108416,
306 .dTxRate = 0.02691479016257117,
311 .commitment_period = 673,
312 .redownload_buffer_size = 14460,
326 consensus.nSubsidyHalvingInterval = 210000;
334 consensus.powLimit =
uint256{
"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
335 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60;
337 consensus.fPowAllowMinDifficultyBlocks =
true;
356 consensus.nMinimumChainWork =
uint256{
"0000000000000000000000000000000000000000000009a0fe15d0177d086304"};
357 consensus.defaultAssumeValid =
uint256{
"0000000002368b1e4ee27e2e85676ae6f9f9e69579b29093e9a82c170bf7cf8a"};
368 const char* testnet4_genesis_msg =
"03/May/2024 000000000000000000001ebd58c244970b3aa9d783bb001011fbe8ea8e98e00e";
369 const CScript testnet4_genesis_script =
CScript() <<
"000000000000000000000000000000000000000000000000000000000000000000"_hex <<
OP_CHECKSIG;
371 testnet4_genesis_script,
378 assert(
consensus.hashGenesisBlock ==
uint256{
"00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043"});
379 assert(
genesis.hashMerkleRoot ==
uint256{
"7aa0a7ae1e223414cb807e40cd57e667b718e42aaf9306db9102fe28912b7b4e"});
384 vSeeds.emplace_back(
"seed.testnet4.bitcoin.sprovoost.nl.");
385 vSeeds.emplace_back(
"seed.testnet4.wiz.biz.");
403 .hash_serialized =
AssumeutxoHash{
uint256{
"784fb5e98241de66fdd429f4392155c9e7db5c017148e66e8fdbc95746f8b9b5"}},
404 .m_chain_tx_count = 11347043,
405 .blockhash =
uint256{
"0000000002ebe8bcda020e0dd6ccfbdfac531d2f6a81457191b99fc2df2dbe3b"},
409 .hash_serialized =
AssumeutxoHash{
uint256{
"10b05d05ad468d0971162e1b222a4aa66caca89da2bb2a93f8f37fb29c4794b0"}},
410 .m_chain_tx_count = 14141057,
411 .blockhash =
uint256{
"000000000bd2317e51b3c5794981c35ba894ce27d3e772d5c39ecd9cbce01dc8"},
418 .tx_count = 14191421,
419 .dTxRate = 0.01848579579528412,
424 .commitment_period = 606,
425 .redownload_buffer_size = 16092,
437 std::vector<uint8_t> bin;
442 bin =
"512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"_hex_v_u8;
444 vSeeds.emplace_back(
"seed.signet.bitcoin.sprovoost.nl.");
445 vSeeds.emplace_back(
"seed.signet.achownodes.xyz.");
447 consensus.nMinimumChainWork =
uint256{
"00000000000000000000000000000000000000000000000000000b463ea0a4b8"};
448 consensus.defaultAssumeValid =
uint256{
"00000008414aab61092ef93f1aacc54cf9e9f16af29ddad493b908a01ff5c329"};
454 .tx_count = 28676833,
455 .dTxRate = 0.06736623436338929,
477 consensus.signet_challenge.assign(bin.begin(), bin.end());
478 consensus.nSubsidyHalvingInterval = 210000;
485 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60;
487 consensus.fPowAllowMinDifficultyBlocks =
false;
491 consensus.powLimit =
uint256{
"00000377ae000000000000000000000000000000000000000000000000000000"};
518 assert(
consensus.hashGenesisBlock ==
uint256{
"00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6"});
519 assert(
genesis.hashMerkleRoot ==
uint256{
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"});
524 .hash_serialized =
AssumeutxoHash{
uint256{
"fe0a44309b74d6b5883d246cb419c6221bcccf0b308c9b59b7d70783dbdf928a"}},
525 .m_chain_tx_count = 2289496,
526 .blockhash =
uint256{
"0000003ca3c99aff040f2563c2ad8f8ec88bd0fd6b8f0895cfaf1ef90353a62c"},
530 .hash_serialized =
AssumeutxoHash{
uint256{
"97267e000b4b876800167e71b9123f1529d13b14308abec2888bbd2160d14545"}},
531 .m_chain_tx_count = 28547497,
532 .blockhash =
uint256{
"0000000577f2741bb30cd9d39d6d71b023afbeb9764f6260786a97969d5c9ac0"},
549 .commitment_period = 620,
550 .redownload_buffer_size = 15724,
575 consensus.powLimit =
uint256{
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"};
576 consensus.nPowTargetTimespan = 24 * 60 * 60;
578 consensus.fPowAllowMinDifficultyBlocks =
true;
629 consensus.vDeployments[deployment_pos].nStartTime = version_bits_params.start_time;
630 consensus.vDeployments[deployment_pos].nTimeout = version_bits_params.timeout;
631 consensus.vDeployments[deployment_pos].min_activation_height = version_bits_params.min_activation_height;
636 assert(
consensus.hashGenesisBlock ==
uint256{
"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"});
637 assert(
genesis.hashMerkleRoot ==
uint256{
"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"});
641 vSeeds.emplace_back(
"dummySeed.invalid.");
649 .hash_serialized =
AssumeutxoHash{
uint256{
"b952555c8ab81fec46f3d4253b7af256d766ceb39fb7752b9d18cdf4a0141327"}},
650 .m_chain_tx_count = 111,
651 .blockhash =
uint256{
"6affe030b7965ab538f820a56ef56c8149b7dc1d1c144af57113be080db7c397"},
656 .hash_serialized =
AssumeutxoHash{
uint256{
"17dcc016d188d16068907cdeb38b75691a118d43053b8cd6a25969419381d13a"}},
657 .m_chain_tx_count = 201,
658 .blockhash =
uint256{
"385901ccbd69dff6bbd00065d01fb8a9e464dede7cfe0372443884f9b1dcf6b9"},
663 .hash_serialized =
AssumeutxoHash{
uint256{
"d2b051ff5e8eef46520350776f4100dd710a63447a8e01d917e92e79751a63e2"}},
664 .m_chain_tx_count = 334,
665 .blockhash =
uint256{
"7cc695046fec709f8c9394b6f928f81e81fd3ac20977bb68760fa1faa7916ea2"},
685 .commitment_period = 275,
686 .redownload_buffer_size = 7017,
693 return std::make_unique<const SigNetParams>(options);
698 return std::make_unique<const CRegTestParams>(options);
703 return std::make_unique<const CMainParams>();
708 return std::make_unique<const CTestNetParams>();
713 return std::make_unique<const CTestNet4Params>();
718 std::vector<int> heights;
722 heights.emplace_back(data.height);
735 if (std::ranges::equal(message, mainnet_msg)) {
737 }
else if (std::ranges::equal(message, testnet_msg)) {
739 }
else if (std::ranges::equal(message, testnet4_msg)) {
741 }
else if (std::ranges::equal(message, regtest_msg)) {
743 }
else if (std::ranges::equal(message, signet_msg)) {
int64_t CAmount
Amount in satoshis (Can be negative).
static constexpr CAmount COIN
The amount of satoshis in one BTC.
static const uint8_t chainparams_seed_test[]
static const uint8_t chainparams_seed_signet[]
static const uint8_t chainparams_seed_main[]
List of fixed seed nodes for the bitcoin network AUTOGENERATED by contrib/seeds/generate-seeds....
static const uint8_t chainparams_seed_testnet4[]
std::vector< CTransactionRef > vtx
uint64_t m_assumed_chain_state_size
MessageStartChars pchMessageStart
static std::unique_ptr< const CChainParams > Main()
std::vector< int > GetAvailableSnapshotHeights() const
static std::unique_ptr< const CChainParams > RegTest(const RegTestOptions &options)
uint64_t m_assumed_blockchain_size
std::vector< uint8_t > vFixedSeeds
bool fDefaultConsistencyChecks
HeadersSyncParams m_headers_sync_params
static std::unique_ptr< const CChainParams > TestNet()
std::vector< unsigned char > base58Prefixes[MAX_BASE58_TYPES]
Consensus::Params consensus
std::vector< AssumeutxoData > m_assumeutxo_data
std::vector< std::string > vSeeds
static std::unique_ptr< const CChainParams > TestNet4()
static std::unique_ptr< const CChainParams > SigNet(const SigNetOptions &options)
uint64_t nPruneAfterHeight
CRegTestParams(const RegTestOptions &opts)
Serialized script, used inside transaction inputs and outputs.
A writer stream (for serialization) that computes a 256-bit hash.
uint256 GetHash()
Compute the double-SHA256 hash of all data written to this object.
SigNetParams(const SigNetOptions &options)
constexpr unsigned char * begin()
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
std::string HexStr(const std::span< const uint8_t > s)
Convert a span of bytes to a lower-case hexadecimal string.
static constexpr script_verify_flags SCRIPT_VERIFY_NONE
Script verification flags.
static CBlock CreateGenesisBlock(const char *pszTimestamp, const CScript &genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount &genesisReward)
std::optional< ChainType > GetNetworkForMagic(const MessageStartChars &message)
std::array< uint8_t, 4 > MessageStartChars
""_hex is a compile-time user-defined literal returning a std::array<std::byte>, equivalent to ParseH...
static CTransactionRef MakeTransactionRef(Tx &&txIn)
RegTestOptions holds configurations for creating a regtest CChainParams.
std::unordered_map< Consensus::DeploymentPos, VersionBitsParameters > version_bits_parameters
std::unordered_map< Consensus::BuriedDeployment, int > activation_heights
SigNetOptions holds configurations for creating a signet CChainParams.
std::optional< std::vector< uint8_t > > challenge
std::optional< std::vector< std::string > > seeds
A mutable version of CTransaction.
std::vector< CTxOut > vout
Holds various statistics on transactions within a chain.
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
static constexpr int64_t NEVER_ACTIVE
Special value for nStartTime indicating that the deployment is never active.
static constexpr int64_t NO_TIMEOUT
Constant for nTimeout very far in the future.