aboutsummaryrefslogtreecommitdiff
path: root/src/chainparams.cpp
diff options
context:
space:
mode:
authorCarl Dong <contact@carldong.me>2022-03-09 00:13:36 -0500
committerTheCharlatan <seb.kung@gmail.com>2023-03-15 16:10:09 +0100
commit76cd4e7c96242398172989609f1b9a8843c404b4 (patch)
tree87d042a74601a0256709aede9aaa85aa8586a3b7 /src/chainparams.cpp
parentb175bdb9b25c0a95cc6d2340cf756f17aaa435fb (diff)
downloadbitcoin-76cd4e7c96242398172989609f1b9a8843c404b4.tar.xz
Decouple SigNetChainParams from ArgsManager
SigNet chain params can now be initialized by configuring a SigNetOptions struct, or with ArgsManager. This offers an interface for creating SigNetChainParams without a gArgs object.
Diffstat (limited to 'src/chainparams.cpp')
-rw-r--r--src/chainparams.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/chainparams.cpp b/src/chainparams.cpp
index 19b5c332f4..12b5a788b4 100644
--- a/src/chainparams.cpp
+++ b/src/chainparams.cpp
@@ -277,11 +277,12 @@ public:
*/
class SigNetParams : public CChainParams {
public:
- explicit SigNetParams(const ArgsManager& args) {
+ explicit SigNetParams(const SigNetOptions& options)
+ {
std::vector<uint8_t> bin;
vSeeds.clear();
- if (!args.IsArgSet("-signetchallenge")) {
+ if (!options.challenge) {
bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae");
vSeeds.emplace_back("seed.signet.bitcoin.sprovoost.nl.");
@@ -300,12 +301,7 @@ public:
.dTxRate = 0.02336701143027275,
};
} else {
- const auto signet_challenge = args.GetArgs("-signetchallenge");
- if (signet_challenge.size() != 1) {
- throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
- }
- bin = ParseHex(signet_challenge[0]);
-
+ bin = *options.challenge;
consensus.nMinimumChainWork = uint256{};
consensus.defaultAssumeValid = uint256{};
m_assumed_blockchain_size = 0;
@@ -315,11 +311,11 @@ public:
0,
0,
};
- LogPrintf("Signet with challenge %s\n", signet_challenge[0]);
+ LogPrintf("Signet with challenge %s\n", HexStr(bin));
}
- if (args.IsArgSet("-signetseednode")) {
- vSeeds = args.GetArgs("-signetseednode");
+ if (options.seeds) {
+ vSeeds = *options.seeds;
}
strNetworkID = CBaseChainParams::SIGNET;
@@ -382,11 +378,26 @@ public:
}
};
+void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& options)
+{
+ if (args.IsArgSet("-signetseednode")) {
+ options.seeds.emplace(args.GetArgs("-signetseednode"));
+ }
+ if (args.IsArgSet("-signetchallenge")) {
+ const auto signet_challenge = args.GetArgs("-signetchallenge");
+ if (signet_challenge.size() != 1) {
+ throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
+ }
+ options.challenge.emplace(ParseHex(signet_challenge[0]));
+ }
+}
+
/**
* Regression test: intended for private networks only. Has minimal difficulty to ensure that
* blocks can be found instantly.
*/
-class CRegTestParams : public CChainParams {
+class CRegTestParams : public CChainParams
+{
public:
explicit CRegTestParams(const ArgsManager& args) {
strNetworkID = CBaseChainParams::REGTEST;
@@ -570,7 +581,9 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
} else if (chain == CBaseChainParams::TESTNET) {
return std::unique_ptr<CChainParams>(new CTestNetParams());
} else if (chain == CBaseChainParams::SIGNET) {
- return std::unique_ptr<CChainParams>(new SigNetParams(args));
+ auto opts = CChainParams::SigNetOptions{};
+ ReadSigNetArgs(args, opts);
+ return std::make_unique<const SigNetParams>(opts);
} else if (chain == CBaseChainParams::REGTEST) {
return std::unique_ptr<CChainParams>(new CRegTestParams(args));
}