Skip to content

Commit 76cd4e7

Browse files
dongcarlTheCharlatan
authored andcommitted
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.
1 parent b175bdb commit 76cd4e7

File tree

2 files changed

+35
-13
lines changed

2 files changed

+35
-13
lines changed

src/chainparams.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,12 @@ class CTestNetParams : public CChainParams {
277277
*/
278278
class SigNetParams : public CChainParams {
279279
public:
280-
explicit SigNetParams(const ArgsManager& args) {
280+
explicit SigNetParams(const SigNetOptions& options)
281+
{
281282
std::vector<uint8_t> bin;
282283
vSeeds.clear();
283284

284-
if (!args.IsArgSet("-signetchallenge")) {
285+
if (!options.challenge) {
285286
bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae");
286287
vSeeds.emplace_back("seed.signet.bitcoin.sprovoost.nl.");
287288

@@ -300,12 +301,7 @@ class SigNetParams : public CChainParams {
300301
.dTxRate = 0.02336701143027275,
301302
};
302303
} else {
303-
const auto signet_challenge = args.GetArgs("-signetchallenge");
304-
if (signet_challenge.size() != 1) {
305-
throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
306-
}
307-
bin = ParseHex(signet_challenge[0]);
308-
304+
bin = *options.challenge;
309305
consensus.nMinimumChainWork = uint256{};
310306
consensus.defaultAssumeValid = uint256{};
311307
m_assumed_blockchain_size = 0;
@@ -315,11 +311,11 @@ class SigNetParams : public CChainParams {
315311
0,
316312
0,
317313
};
318-
LogPrintf("Signet with challenge %s\n", signet_challenge[0]);
314+
LogPrintf("Signet with challenge %s\n", HexStr(bin));
319315
}
320316

321-
if (args.IsArgSet("-signetseednode")) {
322-
vSeeds = args.GetArgs("-signetseednode");
317+
if (options.seeds) {
318+
vSeeds = *options.seeds;
323319
}
324320

325321
strNetworkID = CBaseChainParams::SIGNET;
@@ -382,11 +378,26 @@ class SigNetParams : public CChainParams {
382378
}
383379
};
384380

381+
void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& options)
382+
{
383+
if (args.IsArgSet("-signetseednode")) {
384+
options.seeds.emplace(args.GetArgs("-signetseednode"));
385+
}
386+
if (args.IsArgSet("-signetchallenge")) {
387+
const auto signet_challenge = args.GetArgs("-signetchallenge");
388+
if (signet_challenge.size() != 1) {
389+
throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
390+
}
391+
options.challenge.emplace(ParseHex(signet_challenge[0]));
392+
}
393+
}
394+
385395
/**
386396
* Regression test: intended for private networks only. Has minimal difficulty to ensure that
387397
* blocks can be found instantly.
388398
*/
389-
class CRegTestParams : public CChainParams {
399+
class CRegTestParams : public CChainParams
400+
{
390401
public:
391402
explicit CRegTestParams(const ArgsManager& args) {
392403
strNetworkID = CBaseChainParams::REGTEST;
@@ -570,7 +581,9 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
570581
} else if (chain == CBaseChainParams::TESTNET) {
571582
return std::unique_ptr<CChainParams>(new CTestNetParams());
572583
} else if (chain == CBaseChainParams::SIGNET) {
573-
return std::unique_ptr<CChainParams>(new SigNetParams(args));
584+
auto opts = CChainParams::SigNetOptions{};
585+
ReadSigNetArgs(args, opts);
586+
return std::make_unique<const SigNetParams>(opts);
574587
} else if (chain == CBaseChainParams::REGTEST) {
575588
return std::unique_ptr<CChainParams>(new CRegTestParams(args));
576589
}

src/chainparams.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,15 @@ class CChainParams
122122
const MapAssumeutxo& Assumeutxo() const { return m_assumeutxo_data; }
123123

124124
const ChainTxData& TxData() const { return chainTxData; }
125+
126+
/**
127+
* SigNetOptions holds configurations for creating a signet CChainParams.
128+
*/
129+
struct SigNetOptions {
130+
std::optional<std::vector<uint8_t>> challenge{};
131+
std::optional<std::vector<std::string>> seeds{};
132+
};
133+
125134
protected:
126135
CChainParams() {}
127136

0 commit comments

Comments
 (0)