0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-03-05 14:06:27 -05:00

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.
This commit is contained in:
Carl Dong 2022-03-09 00:13:36 -05:00 committed by TheCharlatan
parent b175bdb9b2
commit 76cd4e7c96
No known key found for this signature in database
GPG key ID: 9B79B45691DB4173
2 changed files with 35 additions and 13 deletions

View file

@ -277,11 +277,12 @@ public:
*/ */
class SigNetParams : public CChainParams { class SigNetParams : public CChainParams {
public: public:
explicit SigNetParams(const ArgsManager& args) { explicit SigNetParams(const SigNetOptions& options)
{
std::vector<uint8_t> bin; std::vector<uint8_t> bin;
vSeeds.clear(); vSeeds.clear();
if (!args.IsArgSet("-signetchallenge")) { if (!options.challenge) {
bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae"); bin = ParseHex("512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430210359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c452ae");
vSeeds.emplace_back("seed.signet.bitcoin.sprovoost.nl."); vSeeds.emplace_back("seed.signet.bitcoin.sprovoost.nl.");
@ -300,12 +301,7 @@ public:
.dTxRate = 0.02336701143027275, .dTxRate = 0.02336701143027275,
}; };
} else { } else {
const auto signet_challenge = args.GetArgs("-signetchallenge"); bin = *options.challenge;
if (signet_challenge.size() != 1) {
throw std::runtime_error(strprintf("%s: -signetchallenge cannot be multiple values.", __func__));
}
bin = ParseHex(signet_challenge[0]);
consensus.nMinimumChainWork = uint256{}; consensus.nMinimumChainWork = uint256{};
consensus.defaultAssumeValid = uint256{}; consensus.defaultAssumeValid = uint256{};
m_assumed_blockchain_size = 0; m_assumed_blockchain_size = 0;
@ -315,11 +311,11 @@ public:
0, 0,
0, 0,
}; };
LogPrintf("Signet with challenge %s\n", signet_challenge[0]); LogPrintf("Signet with challenge %s\n", HexStr(bin));
} }
if (args.IsArgSet("-signetseednode")) { if (options.seeds) {
vSeeds = args.GetArgs("-signetseednode"); vSeeds = *options.seeds;
} }
strNetworkID = CBaseChainParams::SIGNET; 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 * Regression test: intended for private networks only. Has minimal difficulty to ensure that
* blocks can be found instantly. * blocks can be found instantly.
*/ */
class CRegTestParams : public CChainParams { class CRegTestParams : public CChainParams
{
public: public:
explicit CRegTestParams(const ArgsManager& args) { explicit CRegTestParams(const ArgsManager& args) {
strNetworkID = CBaseChainParams::REGTEST; strNetworkID = CBaseChainParams::REGTEST;
@ -570,7 +581,9 @@ std::unique_ptr<const CChainParams> CreateChainParams(const ArgsManager& args, c
} else if (chain == CBaseChainParams::TESTNET) { } else if (chain == CBaseChainParams::TESTNET) {
return std::unique_ptr<CChainParams>(new CTestNetParams()); return std::unique_ptr<CChainParams>(new CTestNetParams());
} else if (chain == CBaseChainParams::SIGNET) { } 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) { } else if (chain == CBaseChainParams::REGTEST) {
return std::unique_ptr<CChainParams>(new CRegTestParams(args)); return std::unique_ptr<CChainParams>(new CRegTestParams(args));
} }

View file

@ -122,6 +122,15 @@ public:
const MapAssumeutxo& Assumeutxo() const { return m_assumeutxo_data; } const MapAssumeutxo& Assumeutxo() const { return m_assumeutxo_data; }
const ChainTxData& TxData() const { return chainTxData; } const ChainTxData& TxData() const { return chainTxData; }
/**
* SigNetOptions holds configurations for creating a signet CChainParams.
*/
struct SigNetOptions {
std::optional<std::vector<uint8_t>> challenge{};
std::optional<std::vector<std::string>> seeds{};
};
protected: protected:
CChainParams() {} CChainParams() {}