27 #include <type_traits> 36 #define consteval_ctor(input) (input) 45 txNew.
vin[0].scriptSig =
CScript() << 486604799 <<
CScriptNum(4) << std::vector<unsigned char>((
const unsigned char*)pszTimestamp, (
const unsigned char*)pszTimestamp + strlen(pszTimestamp));
46 txNew.
vout[0].nValue = genesisReward;
47 txNew.
vout[0].scriptPubKey = genesisOutputScript;
50 genesis.
nTime = nTime;
51 genesis.
nBits = nBits;
73 const char* pszTimestamp =
"The Times 03/Jan/2009 Chancellor on brink of second bailout for banks";
74 const CScript genesisOutputScript =
CScript() <<
ParseHex(
"04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") <<
OP_CHECKSIG;
75 return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
145 vSeeds.emplace_back(
"seed.bitcoin.sipa.be.");
146 vSeeds.emplace_back(
"dnsseed.bluematt.me.");
147 vSeeds.emplace_back(
"dnsseed.bitcoin.dashjr-list-of-p2p-nodes.us.");
148 vSeeds.emplace_back(
"seed.bitcoin.jonasschnelli.ch.");
149 vSeeds.emplace_back(
"seed.btc.petertodd.net.");
150 vSeeds.emplace_back(
"seed.bitcoin.sprovoost.nl.");
151 vSeeds.emplace_back(
"dnsseed.emzy.de.");
152 vSeeds.emplace_back(
"seed.bitcoin.wiz.biz.");
153 vSeeds.emplace_back(
"seed.mainnet.achownodes.xyz.");
170 { 11111,
uint256{
"0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"}},
171 { 33333,
uint256{
"000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6"}},
172 { 74000,
uint256{
"0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20"}},
173 {105000,
uint256{
"00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97"}},
174 {134444,
uint256{
"00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"}},
175 {168000,
uint256{
"000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763"}},
176 {193000,
uint256{
"000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317"}},
177 {210000,
uint256{
"000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e"}},
178 {216116,
uint256{
"00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e"}},
179 {225430,
uint256{
"00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932"}},
180 {250000,
uint256{
"000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214"}},
181 {279000,
uint256{
"0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40"}},
182 {295000,
uint256{
"00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983"}},
189 .hash_serialized = AssumeutxoHash{uint256{"a2a5521b1b5ab65f67818e5e8eccabb7171a517f9e2382208f77687310768f96"}}, 190 .m_chain_tx_count = 991032194, 191 .blockhash = consteval_ctor(uint256{"0000000000000000000320283a032748cef8227873ff4872689bf23f1cda83a5"}), 195 chainTxData = ChainTxData{ 196 // Data from RPC: getchaintxstats 4096 000000000000000000011c5890365bdbe5d25b97ce0057589acaef4f1a57263f 198 .tx_count = 1059312821, 199 .dTxRate = 6.721086701157182, 207 class CTestNetParams : public CChainParams { 210 m_chain_type = ChainType::TESTNET; 211 consensus.signet_blocks = false; 212 consensus.signet_challenge.clear(); 213 consensus.nSubsidyHalvingInterval = 210000; 214 consensus.script_flag_exceptions.emplace( // BIP16 exception 215 uint256{"00000000dd30457c001f4095d208cc1296b0eed002427aa599874af7a432b105"}, SCRIPT_VERIFY_NONE); 216 consensus.BIP34Height = 21111; 217 consensus.BIP34Hash = uint256{"0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8"}; 218 consensus.BIP65Height = 581885; // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6 219 consensus.BIP66Height = 330776; // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182 220 consensus.CSVHeight = 770112; // 00000000025e930139bac5c6c31a403776da130831ab85be56578f3fa75369bb 221 consensus.SegwitHeight = 834624; // 00000000002b980fcd729daaa248fd9316a5200e9b367f4ff2c42453e84201ca 222 consensus.MinBIP9WarningHeight = 836640; // segwit activation height + miner confirmation window 223 consensus.powLimit = uint256{"00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}; 224 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks 225 consensus.nPowTargetSpacing = 10 * 60; 226 consensus.fPowAllowMinDifficultyBlocks = true; 227 consensus.enforce_BIP94 = false; 228 consensus.fPowNoRetargeting = false; 229 consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains 230 consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing 231 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; 232 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; 233 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; 234 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay 236 // Deployment of Taproot (BIPs 340-342) 237 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; 238 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = 1619222400; // April 24th, 2021 239 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = 1628640000; // August 11th, 2021 240 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay 242 consensus.nMinimumChainWork = uint256{"000000000000000000000000000000000000000000000f209695166be8b61fa9"}; 243 consensus.defaultAssumeValid = uint256{"000000000000000465b1a66c9f386308e8c75acef9201f3f577811da09fc90ad"}; // 2873500 245 pchMessageStart[0] = 0x0b; 246 pchMessageStart[1] = 0x11; 247 pchMessageStart[2] = 0x09; 248 pchMessageStart[3] = 0x07; 249 nDefaultPort = 18333; 250 nPruneAfterHeight = 1000; 251 m_assumed_blockchain_size = 93; 252 m_assumed_chain_state_size = 19; 254 genesis = CreateGenesisBlock(1296688602, 414098458, 0x1d00ffff, 1, 50 * COIN); 255 consensus.hashGenesisBlock = genesis.GetHash(); 256 assert(consensus.hashGenesisBlock == uint256{"000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943"}); 257 assert(genesis.hashMerkleRoot == uint256{"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"}); 261 // nodes with support for servicebits filtering should be at the top 262 vSeeds.emplace_back("testnet-seed.bitcoin.jonasschnelli.ch."); 263 vSeeds.emplace_back("seed.tbtc.petertodd.net."); 264 vSeeds.emplace_back("seed.testnet.bitcoin.sprovoost.nl."); 265 vSeeds.emplace_back("testnet-seed.bluematt.me."); // Just a static list of stable node(s), only supports x9 266 vSeeds.emplace_back("seed.testnet.achownodes.xyz."); // Ava Chow, only supports x1, x5, x9, x49, x809, x849, xd, x400, x404, x408, x448, xc08, xc48, x40c 268 base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111); 269 base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196); 270 base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239); 271 base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; 272 base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; 276 vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_test), std::end(chainparams_seed_test)); 278 fDefaultConsistencyChecks = false; 279 m_is_mockable_chain = false; 283 {546, uint256{"000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70"}}, 287 m_assumeutxo_data = { 290 .hash_serialized = AssumeutxoHash{uint256{"f841584909f68e47897952345234e37fcd9128cd818f41ee6c3ca68db8071be7"}}, 291 .m_chain_tx_count = 66484552, 292 .blockhash = consteval_ctor(uint256{"0000000000000093bcb68c03a9a168ae252572d348a2eaeba2cdf9231d73206f"}), 296 chainTxData = ChainTxData{ 297 // Data from RPC: getchaintxstats 4096 000000000000000465b1a66c9f386308e8c75acef9201f3f577811da09fc90ad 299 .tx_count = 187917082, 300 .dTxRate = 3.265051477698455, 308 class CTestNet4Params : public CChainParams { 311 m_chain_type = ChainType::TESTNET4; 312 consensus.signet_blocks = false; 313 consensus.signet_challenge.clear(); 314 consensus.nSubsidyHalvingInterval = 210000; 315 consensus.BIP34Height = 1; 316 consensus.BIP34Hash = uint256{}; 317 consensus.BIP65Height = 1; 318 consensus.BIP66Height = 1; 319 consensus.CSVHeight = 1; 320 consensus.SegwitHeight = 1; 321 consensus.MinBIP9WarningHeight = 0; 322 consensus.powLimit = uint256S("00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); 323 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks 324 consensus.nPowTargetSpacing = 10 * 60; 325 consensus.fPowAllowMinDifficultyBlocks = true; 326 consensus.enforce_BIP94 = true; 327 consensus.fPowNoRetargeting = false; 328 consensus.nRuleChangeActivationThreshold = 1512; // 75% for testchains 329 consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing 330 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; 331 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; 332 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; 333 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay 335 // Deployment of Taproot (BIPs 340-342) 336 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; 337 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; 338 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; 339 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay 341 consensus.nMinimumChainWork = uint256{"00000000000000000000000000000000000000000000005faa15d02e6202f3ba"}; 342 consensus.defaultAssumeValid = uint256{"000000005be348057db991fa5d89fe7c4695b667cfb311391a8db374b6f681fd"}; // 39550 344 pchMessageStart[0] = 0x1c; 345 pchMessageStart[1] = 0x16; 346 pchMessageStart[2] = 0x3f; 347 pchMessageStart[3] = 0x28; 348 nDefaultPort = 48333; 349 nPruneAfterHeight = 1000; 350 m_assumed_blockchain_size = 1; 351 m_assumed_chain_state_size = 0; 353 const char* testnet4_genesis_msg = "03/May/2024 000000000000000000001ebd58c244970b3aa9d783bb001011fbe8ea8e98e00e"; 354 const CScript testnet4_genesis_script = CScript() << ParseHex("000000000000000000000000000000000000000000000000000000000000000000") << OP_CHECKSIG; 355 genesis = CreateGenesisBlock(testnet4_genesis_msg, 356 testnet4_genesis_script, 362 consensus.hashGenesisBlock = genesis.GetHash(); 363 assert(consensus.hashGenesisBlock == uint256S("0x00000000da84f2bafbbc53dee25a72ae507ff4914b867c565be350b0da8bf043")); 364 assert(genesis.hashMerkleRoot == uint256S("0x7aa0a7ae1e223414cb807e40cd57e667b718e42aaf9306db9102fe28912b7b4e")); 368 // nodes with support for servicebits filtering should be at the top 369 vSeeds.emplace_back("seed.testnet4.bitcoin.sprovoost.nl."); // Sjors Provoost 370 vSeeds.emplace_back("seed.testnet4.wiz.biz."); // Jason Maurice 372 base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111); 373 base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196); 374 base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239); 375 base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF}; 376 base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94}; 380 vFixedSeeds = std::vector<uint8_t>(std::begin(chainparams_seed_testnet4), std::end(chainparams_seed_testnet4)); 382 fDefaultConsistencyChecks = false; 383 m_is_mockable_chain = false; 391 m_assumeutxo_data = { 395 chainTxData = ChainTxData{ 396 // Data from RPC: getchaintxstats 4096 000000005be348057db991fa5d89fe7c4695b667cfb311391a8db374b6f681fd 399 .dTxRate = 0.01570402633472492, 407 class SigNetParams : public CChainParams { 409 explicit SigNetParams(const SigNetOptions& options) 411 std::vector<uint8_t> bin; 414 if (!options.challenge) { 415 bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"); 416 vSeeds.emplace_back("seed.signet.bitcoin.sprovoost.nl."); 417 vSeeds.emplace_back("seed.signet.achownodes.xyz."); // Ava Chow, only supports x1, x5, x9, x49, x809, x849, xd, x400, x404, x408, x448, xc08, xc48, x40c 419 // Hardcoded nodes can be removed once there are more DNS seeds 420 vSeeds.emplace_back("178.128.221.177"); 421 vSeeds.emplace_back("v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333"); 423 consensus.nMinimumChainWork = uint256{"0000000000000000000000000000000000000000000000000000025dbd66e58f"}; 424 consensus.defaultAssumeValid = uint256{"0000014aad1d58dddcb964dd749b073374c6306e716b22f573a2efe68d414539"}; // 208800 425 m_assumed_blockchain_size = 2; 426 m_assumed_chain_state_size = 0; 427 chainTxData = ChainTxData{ 428 // Data from RPC: getchaintxstats 4096 0000014aad1d58dddcb964dd749b073374c6306e716b22f573a2efe68d414539 431 .dTxRate = 0.06271073277261494, 434 bin = *options.challenge; 435 consensus.nMinimumChainWork = uint256{}; 436 consensus.defaultAssumeValid = uint256{}; 437 m_assumed_blockchain_size = 0; 438 m_assumed_chain_state_size = 0; 439 chainTxData = ChainTxData{ 444 LogPrintf("Signet with challenge %s\n", HexStr(bin)); 448 vSeeds = *options.seeds; 451 m_chain_type = ChainType::SIGNET; 452 consensus.signet_blocks = true; 453 consensus.signet_challenge.assign(bin.begin(), bin.end()); 454 consensus.nSubsidyHalvingInterval = 210000; 455 consensus.BIP34Height = 1; 456 consensus.BIP34Hash = uint256{}; 457 consensus.BIP65Height = 1; 458 consensus.BIP66Height = 1; 459 consensus.CSVHeight = 1; 460 consensus.SegwitHeight = 1; 461 consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks 462 consensus.nPowTargetSpacing = 10 * 60; 463 consensus.fPowAllowMinDifficultyBlocks = false; 464 consensus.enforce_BIP94 = false; 465 consensus.fPowNoRetargeting = false; 466 consensus.nRuleChangeActivationThreshold = 1815; // 90% of 2016 467 consensus.nMinerConfirmationWindow = 2016; // nPowTargetTimespan / nPowTargetSpacing 468 consensus.MinBIP9WarningHeight = 0; 469 consensus.powLimit = uint256{"00000377ae000000000000000000000000000000000000000000000000000000"}; 470 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28; 471 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = Consensus::BIP9Deployment::NEVER_ACTIVE; 472 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; 473 consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay 475 // Activation of Taproot (BIPs 340-342) 476 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].bit = 2; 477 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nStartTime = Consensus::BIP9Deployment::ALWAYS_ACTIVE; 478 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; 479 consensus.vDeployments[Consensus::DEPLOYMENT_TAPROOT].min_activation_height = 0; // No activation delay 481 // message start is defined as the first 4 bytes of the sha256d of the block script 483 h << consensus.signet_challenge; 484 uint256 hash = h.GetHash(); 485 std::copy_n(hash.begin(), 4, pchMessageStart.begin()); 487 nDefaultPort = 38333; 488 nPruneAfterHeight = 1000; 490 genesis = CreateGenesisBlock(1598918400, 52613770, 0x1e0377ae, 1, 50 * COIN); 491 consensus.hashGenesisBlock = genesis.GetHash(); 492 assert(consensus.hashGenesisBlock == uint256{"00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6"}); 493 assert(genesis.hashMerkleRoot == uint256{"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"}); 497 m_assumeutxo_data = { 500 .hash_serialized =
AssumeutxoHash{
uint256{
"fe0a44309b74d6b5883d246cb419c6221bcccf0b308c9b59b7d70783dbdf928a"}},
501 .m_chain_tx_count = 2289496,
502 .blockhash =
consteval_ctor(
uint256{
"0000003ca3c99aff040f2563c2ad8f8ec88bd0fd6b8f0895cfaf1ef90353a62c"}),
603 vSeeds.emplace_back(
"dummySeed.invalid.");
610 {0,
uint256{
"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"}},
617 .hash_serialized =
AssumeutxoHash{
uint256{
"6657b736d4fe4db0cbc796789e812d5dba7f5c143764b1b6905612f1830609d1"}},
618 .m_chain_tx_count = 111,
619 .blockhash =
consteval_ctor(
uint256{
"696e92821f65549c7ee134edceeeeaaa4105647a3c4fd9f298c0aec0ab50425c"}),
624 .hash_serialized =
AssumeutxoHash{
uint256{
"4f34d431c3e482f6b0d67b64609ece3964dc8d7976d02ac68dd7c9c1421738f2"}},
625 .m_chain_tx_count = 201,
626 .blockhash =
consteval_ctor(
uint256{
"5e93653318f294fb5aa339d00bbf8cf1c3515488ad99412c37608b139ea63b27"}),
631 .hash_serialized =
AssumeutxoHash{
uint256{
"a4bf3407ccb2cc0145c49ebba8fa91199f8a3903daf0883875941497d2493c27"}},
632 .m_chain_tx_count = 334,
633 .blockhash =
consteval_ctor(
uint256{
"3bb7ce5eba0be48939b7a521ac1ba9316afee2c7bada3a0cca24188e6d7d96c0"}),
655 return std::make_unique<const SigNetParams>(options);
660 return std::make_unique<const CRegTestParams>(options);
665 return std::make_unique<const CMainParams>();
670 return std::make_unique<const CTestNetParams>();
675 return std::make_unique<const CTestNet4Params>();
680 std::vector<int> heights;
684 heights.emplace_back(data.height);
697 if (std::equal(message.begin(), message.end(), mainnet_msg.data())) {
699 }
else if (std::equal(message.begin(), message.end(), testnet_msg.data())) {
701 }
else if (std::equal(message.begin(), message.end(), testnet4_msg.data())) {
703 }
else if (std::equal(message.begin(), message.end(), regtest_msg.data())) {
705 }
else if (std::equal(message.begin(), message.end(), signet_msg.data())) {
static constexpr int64_t NO_TIMEOUT
Constant for nTimeout very far in the future.
int min_activation_height
If lock in occurs, delay activation until at least this block height.
static std::unique_ptr< const CChainParams > TestNet4()
std::vector< Byte > ParseHex(std::string_view hex_str)
Like TryParseHex, but returns an empty vector on invalid input.
Main network on which people trade goods and services.
int64_t nPowTargetTimespan
std::unordered_map< Consensus::DeploymentPos, VersionBitsParameters > version_bits_parameters
std::vector< uint8_t > vFixedSeeds
std::vector< unsigned char > base58Prefixes[MAX_BASE58_TYPES]
bool fPowAllowMinDifficultyBlocks
static constexpr int64_t ALWAYS_ACTIVE
Special value for nStartTime indicating that the deployment is always active.
int BIP66Height
Block height at which BIP66 becomes active.
uint64_t m_assumed_chain_state_size
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system...
int CSVHeight
Block height at which CSV (BIP68, BIP112 and BIP113) becomes active.
static std::unique_ptr< const CChainParams > Main()
static std::unique_ptr< const CChainParams > RegTest(const RegTestOptions &options)
std::map< uint256, uint32_t > script_flag_exceptions
Hashes of blocks that.
uint64_t m_assumed_blockchain_size
int nSubsidyHalvingInterval
int64_t CAmount
Amount in satoshis (Can be negative)
std::array< uint8_t, 4 > MessageStartChars
std::vector< int > GetAvailableSnapshotHeights() const
uint256 powLimit
Proof of work parameters.
static const uint8_t chainparams_seed_main[]
List of fixed seed nodes for the bitcoin network AUTOGENERATED by contrib/seeds/generate-seeds.py.
int BIP34Height
Block height and hash at which BIP34 becomes active.
int64_t nStartTime
Start MedianTime for version bits miner confirmation.
Regression test: intended for private networks only.
int64_t nPowTargetSpacing
Holds various statistics on transactions within a chain.
std::vector< std::string > vSeeds
RegTestOptions holds configurations for creating a regtest CChainParams.
bool signet_blocks
If true, witness commitments contain a payload equal to a Bitcoin Script solution to the signet chall...
static constexpr int64_t NEVER_ACTIVE
Special value for nStartTime indicating that the deployment is never active.
uint256 BlockMerkleRoot(const CBlock &block, bool *mutated)
uint32_t nMinerConfirmationWindow
std::vector< CTxOut > vout
SigNetOptions holds configurations for creating a signet CChainParams.
static CTransactionRef MakeTransactionRef(Tx &&txIn)
int BIP65Height
Block height at which BIP65 becomes active.
int64_t nTimeout
Timeout/expiry MedianTime for the deployment attempt.
uint256 nMinimumChainWork
The best chain should have at least this much work.
bool enforce_BIP94
Enfore BIP94 timewarp attack mitigation.
std::vector< CTransactionRef > vtx
std::unordered_map< Consensus::BuriedDeployment, int > activation_heights
uint256 defaultAssumeValid
By default assume that the signatures in ancestors of this block are valid.
static std::unique_ptr< const CChainParams > SigNet(const SigNetOptions &options)
static std::unique_ptr< const CChainParams > TestNet()
Serialized script, used inside transaction inputs and outputs.
Consensus::Params consensus
std::vector< uint8_t > signet_challenge
#define consteval_ctor(input)
std::optional< ChainType > GetNetworkForMagic(const MessageStartChars &message)
int MinBIP9WarningHeight
Don't warn about unknown BIP 9 activations below this height.
static CBlock CreateGenesisBlock(const char *pszTimestamp, const CScript &genesisOutputScript, uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount &genesisReward)
A mutable version of CTransaction.
uint32_t nRuleChangeActivationThreshold
Minimum blocks including miner confirmation of the total of 2016 blocks in a retargeting period...
uint64_t nPruneAfterHeight
MessageStartChars pchMessageStart
int SegwitHeight
Block height at which Segwit (BIP141, BIP143 and BIP147) becomes active.
int bit
Bit position to select the particular bit in nVersion.
CRegTestParams(const RegTestOptions &opts)
CCheckpointData checkpointData
bool fDefaultConsistencyChecks
std::vector< AssumeutxoData > m_assumeutxo_data
BIP9Deployment vDeployments[MAX_VERSION_BITS_DEPLOYMENTS]
static constexpr CAmount COIN
The amount of satoshis in one BTC.