Skip to content

Commit 1a333f1

Browse files
committed
Testchains: Introduce custom chain whose constructor...
...reads params from regular arguments
1 parent 62402b0 commit 1a333f1

File tree

4 files changed

+85
-5
lines changed

4 files changed

+85
-5
lines changed

src/chainparams.cpp

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,6 +395,80 @@ void CRegTestParams::UpdateVersionBitsParametersFromArgs(const ArgsManager& args
395395
}
396396
}
397397

398+
/**
399+
* Custom params for testing.
400+
*/
401+
class CCustomParams : public CRegTestParams {
402+
403+
void UpdateFromArgs(ArgsManager& args)
404+
{
405+
UpdateVersionBitsParametersFromArgs(args);
406+
407+
consensus.nSubsidyHalvingInterval = args.GetArg("-con_nsubsidyhalvinginterval", consensus.nSubsidyHalvingInterval);
408+
consensus.BIP16Exception = uint256S(args.GetArg("-con_bip16exception", "0x0"));
409+
consensus.BIP34Height = args.GetArg("-con_bip34height", consensus.BIP34Height);
410+
consensus.BIP34Hash = uint256S(args.GetArg("-con_bip34hash", "0x0"));
411+
consensus.BIP65Height = args.GetArg("-con_bip65height", consensus.BIP65Height);
412+
consensus.BIP66Height = args.GetArg("-con_bip66height", consensus.BIP66Height);
413+
consensus.powLimit = uint256S(args.GetArg("-con_powlimit", "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"));
414+
consensus.nPowTargetTimespan = args.GetArg("-con_npowtargettimespan", consensus.nPowTargetTimespan);
415+
consensus.nPowTargetSpacing = args.GetArg("-con_npowtargetspacing", consensus.nPowTargetSpacing);
416+
consensus.fPowAllowMinDifficultyBlocks = args.GetBoolArg("-con_fpowallowmindifficultyblocks", consensus.fPowAllowMinDifficultyBlocks);
417+
consensus.fPowNoRetargeting = args.GetBoolArg("-con_fpownoretargeting", consensus.fPowNoRetargeting);
418+
consensus.nRuleChangeActivationThreshold = args.GetArg("-con_nrulechangeactivationthreshold", consensus.nRuleChangeActivationThreshold);
419+
consensus.nMinerConfirmationWindow = args.GetArg("-con_nminerconfirmationwindow", consensus.nMinerConfirmationWindow);
420+
421+
consensus.nMinimumChainWork = uint256S(args.GetArg("-con_nminimumchainwork", "0x0"));
422+
consensus.defaultAssumeValid = uint256S(args.GetArg("-con_defaultassumevalid", "0x00"));
423+
424+
nPruneAfterHeight = args.GetArg("-npruneafterheight", nPruneAfterHeight);
425+
fDefaultConsistencyChecks = args.GetBoolArg("-fdefaultconsistencychecks", fDefaultConsistencyChecks);
426+
fMineBlocksOnDemand = args.GetBoolArg("-fmineblocksondemand", fMineBlocksOnDemand);
427+
m_fallback_fee_enabled = args.GetBoolArg("-fallback_fee_enabled", m_fallback_fee_enabled);
428+
429+
bech32_hrp = args.GetArg("-bech32_hrp", bech32_hrp);
430+
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-pubkeyprefix", 111));
431+
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1, args.GetArg("-scriptprefix", 196));
432+
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1, args.GetArg("-secretprefix", 239));
433+
434+
std::string extpubprefix = args.GetArg("-extpubkeyprefix", "043587CF");
435+
if (!IsHex(extpubprefix) || extpubprefix.size() != 8) {
436+
assert("-extpubkeyprefix must be hex string of length 8" && false);
437+
}
438+
base58Prefixes[EXT_PUBLIC_KEY] = ParseHex(extpubprefix);
439+
440+
std::string extprvprefix = args.GetArg("-extprvkeyprefix", "04358394");
441+
if (!IsHex(extprvprefix) || extprvprefix.size() != 8) {
442+
assert("-extprvkeyprefix must be hex string of length 8" && false);
443+
}
444+
base58Prefixes[EXT_SECRET_KEY] = ParseHex(extprvprefix);
445+
446+
const std::string magic_str = args.GetArg("-pchmessagestart", "FABFB5DA");
447+
if (!IsHex(magic_str) || magic_str.size() != 8) {
448+
assert("-pchmessagestart must be hex string of length 8" && false);
449+
}
450+
const std::vector<unsigned char> magic_byte = ParseHex(magic_str);
451+
std::copy(begin(magic_byte), end(magic_byte), pchMessageStart);
452+
453+
vSeeds.clear();
454+
if (gArgs.IsArgSet("-seednode")) {
455+
const auto seednodes = gArgs.GetArgs("-seednode");
456+
if (seednodes.size() != 1 || seednodes[0] != "0") {
457+
vSeeds = seednodes;
458+
}
459+
}
460+
}
461+
462+
public:
463+
CCustomParams(const std::string& chain, ArgsManager& args) : CRegTestParams(args)
464+
{
465+
strNetworkID = chain;
466+
UpdateFromArgs(args);
467+
genesis = CreateGenesisBlock(strNetworkID.c_str(), CScript(OP_TRUE), 1296688602, 2, 0x207fffff, 1, 50 * COIN);
468+
consensus.hashGenesisBlock = genesis.GetHash();
469+
}
470+
};
471+
398472
static std::unique_ptr<const CChainParams> globalChainParams;
399473

400474
const CChainParams &Params() {
@@ -404,13 +478,15 @@ const CChainParams &Params() {
404478

405479
std::unique_ptr<const CChainParams> CreateChainParams(const std::string& chain)
406480
{
481+
// Reserved names for non-custom chains
407482
if (chain == CBaseChainParams::MAIN)
408483
return std::unique_ptr<CChainParams>(new CMainParams());
409484
else if (chain == CBaseChainParams::TESTNET)
410485
return std::unique_ptr<CChainParams>(new CTestNetParams());
411486
else if (chain == CBaseChainParams::REGTEST)
412487
return std::unique_ptr<CChainParams>(new CRegTestParams(gArgs));
413-
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
488+
489+
return std::unique_ptr<CChainParams>(new CCustomParams(chain, gArgs));
414490
}
415491

416492
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)