@@ -395,6 +395,73 @@ void CRegTestParams::UpdateVersionBitsParametersFromArgs(const ArgsManager& args
395395 }
396396}
397397
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+
398465static std::unique_ptr<const CChainParams> globalChainParams;
399466
400467const CChainParams &Params () {
@@ -404,13 +471,15 @@ const CChainParams &Params() {
404471
405472std::unique_ptr<const CChainParams> CreateChainParams (const std::string& chain)
406473{
474+ // Reserved names for non-custom chains
407475 if (chain == CBaseChainParams::MAIN)
408476 return std::unique_ptr<CChainParams>(new CMainParams ());
409477 else if (chain == CBaseChainParams::TESTNET)
410478 return std::unique_ptr<CChainParams>(new CTestNetParams ());
411479 else if (chain == CBaseChainParams::REGTEST)
412480 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 ));
414483}
415484
416485void SelectParams (const std::string& network)
0 commit comments