@@ -395,6 +395,73 @@ void CRegTestParams::UpdateVersionBitsParametersFromArgs(const ArgsManager& args
395
395
}
396
396
}
397
397
398
+ /* *
399
+ * Custom params for testing.
400
+ */
401
+ class CCustomParams : public CRegTestParams {
402
+ void UpdateFromArgs (ArgsManager& args)
403
+ {
404
+ UpdateVersionBitsParametersFromArgs (args);
405
+
406
+ consensus.nSubsidyHalvingInterval = args.GetArg (" -con_nsubsidyhalvinginterval" , consensus.nSubsidyHalvingInterval );
407
+ consensus.BIP16Exception = uint256S (args.GetArg (" -con_bip16exception" , " 0x0" ));
408
+ consensus.BIP34Height = args.GetArg (" -con_bip34height" , consensus.BIP34Height );
409
+ consensus.BIP34Hash = uint256S (args.GetArg (" -con_bip34hash" , " 0x0" ));
410
+ consensus.BIP65Height = args.GetArg (" -con_bip65height" , consensus.BIP65Height );
411
+ consensus.BIP66Height = args.GetArg (" -con_bip66height" , consensus.BIP66Height );
412
+ consensus.powLimit = uint256S (args.GetArg (" -con_powlimit" , " 7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ));
413
+ consensus.nPowTargetTimespan = args.GetArg (" -con_npowtargettimespan" , consensus.nPowTargetTimespan );
414
+ consensus.nPowTargetSpacing = args.GetArg (" -con_npowtargetspacing" , consensus.nPowTargetSpacing );
415
+ consensus.fPowAllowMinDifficultyBlocks = args.GetBoolArg (" -con_fpowallowmindifficultyblocks" , consensus.fPowAllowMinDifficultyBlocks );
416
+ consensus.fPowNoRetargeting = args.GetBoolArg (" -con_fpownoretargeting" , consensus.fPowNoRetargeting );
417
+ consensus.nRuleChangeActivationThreshold = (uint32_t )args.GetArg (" -con_nrulechangeactivationthreshold" , consensus.nRuleChangeActivationThreshold );
418
+ consensus.nMinerConfirmationWindow = (uint32_t )args.GetArg (" -con_nminerconfirmationwindow" , consensus.nMinerConfirmationWindow );
419
+
420
+ consensus.nMinimumChainWork = uint256S (args.GetArg (" -con_nminimumchainwork" , " 0x0" ));
421
+ consensus.defaultAssumeValid = uint256S (args.GetArg (" -con_defaultassumevalid" , " 0x00" ));
422
+
423
+ nPruneAfterHeight = (uint64_t )args.GetArg (" -npruneafterheight" , nPruneAfterHeight);
424
+ fDefaultConsistencyChecks = args.GetBoolArg (" -fdefaultconsistencychecks" , fDefaultConsistencyChecks );
425
+ fMineBlocksOnDemand = args.GetBoolArg (" -fmineblocksondemand" , fMineBlocksOnDemand );
426
+ m_fallback_fee_enabled = args.GetBoolArg (" -fallback_fee_enabled" , m_fallback_fee_enabled);
427
+
428
+ bech32_hrp = args.GetArg (" -bech32_hrp" , bech32_hrp);
429
+ base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -pubkeyprefix" , 111 ));
430
+ base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char >(1 , args.GetArg (" -scriptprefix" , 196 ));
431
+ base58Prefixes[SECRET_KEY] = std::vector<unsigned char >(1 , args.GetArg (" -secretprefix" , 239 ));
432
+
433
+ std::string extpubprefix = args.GetArg (" -extpubkeyprefix" , " 043587CF" );
434
+ assert (IsHex (extpubprefix) && extpubprefix.size () == 8 && " -extpubkeyprefix must be hex string of length 8" );
435
+ base58Prefixes[EXT_PUBLIC_KEY] = ParseHex (extpubprefix);
436
+
437
+ std::string extprvprefix = args.GetArg (" -extprvkeyprefix" , " 04358394" );
438
+ assert (IsHex (extprvprefix) && extprvprefix.size () == 8 && " -extprvkeyprefix must be hex string of length 8" );
439
+ base58Prefixes[EXT_SECRET_KEY] = ParseHex (extprvprefix);
440
+
441
+ const std::string magic_str = args.GetArg (" -pchmessagestart" , " FABFB5DA" );
442
+ assert (IsHex (magic_str) && magic_str.size () == 8 && " -pchmessagestart must be hex string of length 8" );
443
+ const std::vector<unsigned char > magic_byte = ParseHex (magic_str);
444
+ std::copy (begin (magic_byte), end (magic_byte), pchMessageStart);
445
+
446
+ vSeeds.clear ();
447
+ if (gArgs .IsArgSet (" -seednode" )) {
448
+ const auto seednodes = gArgs .GetArgs (" -seednode" );
449
+ if (seednodes.size () != 1 || seednodes[0 ] != " 0" ) {
450
+ vSeeds = seednodes;
451
+ }
452
+ }
453
+ }
454
+
455
+ public:
456
+ CCustomParams (const std::string& chain, ArgsManager& args) : CRegTestParams(args)
457
+ {
458
+ strNetworkID = chain;
459
+ UpdateFromArgs (args);
460
+ genesis = CreateGenesisBlock (strNetworkID.c_str (), CScript (OP_TRUE), 1296688602 , 2 , 0x207fffff , 1 , 50 * COIN);
461
+ consensus.hashGenesisBlock = genesis.GetHash ();
462
+ }
463
+ };
464
+
398
465
static std::unique_ptr<const CChainParams> globalChainParams;
399
466
400
467
const CChainParams &Params () {
@@ -404,13 +471,15 @@ const CChainParams &Params() {
404
471
405
472
std::unique_ptr<const CChainParams> CreateChainParams (const std::string& chain)
406
473
{
474
+ // Reserved names for non-custom chains
407
475
if (chain == CBaseChainParams::MAIN)
408
476
return std::unique_ptr<CChainParams>(new CMainParams ());
409
477
else if (chain == CBaseChainParams::TESTNET)
410
478
return std::unique_ptr<CChainParams>(new CTestNetParams ());
411
479
else if (chain == CBaseChainParams::REGTEST)
412
480
return std::unique_ptr<CChainParams>(new CRegTestParams (gArgs ));
413
- throw std::runtime_error (strprintf (" %s: Unknown chain %s." , __func__, chain));
481
+
482
+ return std::unique_ptr<CChainParams>(new CCustomParams (chain, gArgs ));
414
483
}
415
484
416
485
void SelectParams (const std::string& network)
0 commit comments