Skip to content

Commit a06be15

Browse files
committed
Testchains: Introduce custom chain whose constructor...
...reads params from regular arguments
1 parent 46749eb commit a06be15

File tree

4 files changed

+78
-5
lines changed

4 files changed

+78
-5
lines changed

src/chainparams.cpp

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
398465
static std::unique_ptr<const CChainParams> globalChainParams;
399466

400467
const CChainParams &Params() {
@@ -404,13 +471,15 @@ const CChainParams &Params() {
404471

405472
std::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

416485
void SelectParams(const std::string& network)

src/chainparamsbase.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,12 @@ const std::string CBaseChainParams::REGTEST = "regtest";
1717

1818
void SetupChainParamsBaseOptions()
1919
{
20-
gArgs.AddArg("-chain=<chain>", "Use the chain <chain> (default: main). Allowed values: main, testnet, regtest", false, OptionsCategory::CHAINPARAMS);
20+
gArgs.AddArg("-chain=<chain>", "Use the chain <chain> (default: main). Reserved values: main, test, regtest", false, OptionsCategory::CHAINPARAMS);
2121
gArgs.AddArg("-regtest", "Enter regression test mode, which uses a special chain in which blocks can be solved instantly. "
2222
"This is intended for regression testing tools and app development.", true, OptionsCategory::CHAINPARAMS);
2323
gArgs.AddArg("-testnet", "Use the test chain", false, OptionsCategory::CHAINPARAMS);
24-
gArgs.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest-only)", true, OptionsCategory::CHAINPARAMS);
24+
gArgs.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest or custom only)", true, OptionsCategory::CHAINPARAMS);
25+
gArgs.AddArg("-seednode=<ip>", "Use specified node as seed node. This option can be specified multiple times to connect to multiple nodes. (custom only)", true, OptionsCategory::CHAINPARAMS);
2526
}
2627

2728
static std::unique_ptr<CBaseChainParams> globalChainBaseParams;
@@ -40,8 +41,8 @@ std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain
4041
return MakeUnique<CBaseChainParams>("testnet3", 18332);
4142
else if (chain == CBaseChainParams::REGTEST)
4243
return MakeUnique<CBaseChainParams>("regtest", 18443);
43-
else
44-
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
44+
45+
return MakeUnique<CBaseChainParams>(chain, 18553);
4546
}
4647

4748
void SelectBaseParams(const std::string& chain)

src/init.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,7 @@ void SetupServerArgs()
349349
// Hidden Options
350350
std::vector<std::string> hidden_args = {"-rpcssl", "-benchmark", "-h", "-help", "-socks", "-tor", "-debugnet", "-whitelistalwaysrelay",
351351
"-prematurewitness", "-walletprematurewitness", "-promiscuousmempoolflags", "-blockminsize", "-dbcrashratio", "-forcecompactdb", "-usehd",
352+
"-con_fpowallowmindifficultyblocks", "-con_fpownoretargeting", "-con_nsubsidyhalvinginterval", "-con_bip16exception", "-con_bip34height", "-con_bip65height", "-con_bip66height", "-con_npowtargettimespan", "-con_npowtargetspacing", "-con_nrulechangeactivationthreshold", "-con_nminerconfirmationwindow", "-con_powlimit", "-con_bip34hash", "-con_nminimumchainwork", "-con_defaultassumevalid", "-npruneafterheight", "-fdefaultconsistencychecks", "-fmineblocksondemand", "-bech32_hrp", "-fallback_fee_enabled", "-pubkeyprefix", "-scriptprefix", "-secretprefix", "-extpubkeyprefix", "-extprvkeyprefix", "-pchmessagestart",
352353
// GUI args. These will be overwritten by SetupUIArgs for the GUI
353354
"-allowselfsignedrootcertificates", "-choosedatadir", "-lang=<lang>", "-min", "-resetguisettings", "-rootcertificates=<file>", "-splash", "-uiplatform"};
354355

test/lint/check-doc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
# list unsupported, deprecated and duplicate args as they need no documentation
2525
SET_DOC_OPTIONAL = set(['-rpcssl', '-benchmark', '-h', '-help', '-socks', '-tor', '-debugnet', '-whitelistalwaysrelay', '-promiscuousmempoolflags', '-blockminsize', '-dbcrashratio', '-forcecompactdb', '-usehd'])
2626

27+
SET_DOC_OPTIONAL.update(['-con_fpowallowmindifficultyblocks', '-con_fpownoretargeting', '-con_nsubsidyhalvinginterval', '-con_bip16exception', '-con_bip34height', '-con_bip65height', '-con_bip66height', '-con_npowtargettimespan', '-con_npowtargetspacing', '-con_nrulechangeactivationthreshold', '-con_nminerconfirmationwindow', '-con_powlimit', '-con_bip34hash', '-con_nminimumchainwork', '-con_defaultassumevalid', '-npruneafterheight', '-fdefaultconsistencychecks', '-fmineblocksondemand', '-bech32_hrp', '-fallback_fee_enabled', '-pubkeyprefix', '-scriptprefix', '-secretprefix', '-extpubkeyprefix', '-extprvkeyprefix', '-pchmessagestart'])
28+
2729

2830
def main():
2931
used = check_output(CMD_GREP_ARGS, shell=True, universal_newlines=True)

0 commit comments

Comments
 (0)