add signet chain and accompanying parameters
Co-authored-by: Anthony Towns <aj@erisian.com.au>
This commit is contained in:
1 parent
404682b7cd
commit
e8990f1214
5 files changed
+117
-11
No files matched your search
+96
-3
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include <chainparamsseeds.h>
|
#include <chainparamsseeds.h>
|
||||||
#include <consensus/merkle.h>
|
#include <consensus/merkle.h>
|
||||||
|
#include <hash.h> // for signet block challenge hash
|
||||||
#include <tinyformat.h>
|
#include <tinyformat.h>
|
||||||
#include <util/system.h>
|
#include <util/system.h>
|
||||||
#include <util/strencodings.h>
|
#include <util/strencodings.h>
|
||||||
@@ -63,6 +64,8 @@ class CMainParams : public CChainParams {
|
|||||||
public:
|
public:
|
||||||
CMainParams() {
|
CMainParams() {
|
||||||
strNetworkID = CBaseChainParams::MAIN;
|
strNetworkID = CBaseChainParams::MAIN;
|
||||||
|
consensus.signet_blocks = false;
|
||||||
|
consensus.signet_challenge.clear();
|
||||||
consensus.nSubsidyHalvingInterval = 210000;
|
consensus.nSubsidyHalvingInterval = 210000;
|
||||||
consensus.BIP16Exception = uint256S("0x00000000000002dc756eebf4f49723ed8d30cc28a5f108eb94b1ba88ac4f9c22");
|
consensus.BIP16Exception = uint256S("0x00000000000002dc756eebf4f49723ed8d30cc28a5f108eb94b1ba88ac4f9c22");
|
||||||
consensus.BIP34Height = 227931;
|
consensus.BIP34Height = 227931;
|
||||||
@@ -172,6 +175,8 @@ class CTestNetParams : public CChainParams {
|
|||||||
public:
|
public:
|
||||||
CTestNetParams() {
|
CTestNetParams() {
|
||||||
strNetworkID = CBaseChainParams::TESTNET;
|
strNetworkID = CBaseChainParams::TESTNET;
|
||||||
|
consensus.signet_blocks = false;
|
||||||
|
consensus.signet_challenge.clear();
|
||||||
consensus.nSubsidyHalvingInterval = 210000;
|
consensus.nSubsidyHalvingInterval = 210000;
|
||||||
consensus.BIP16Exception = uint256S("0x00000000dd30457c001f4095d208cc1296b0eed002427aa599874af7a432b105");
|
consensus.BIP16Exception = uint256S("0x00000000dd30457c001f4095d208cc1296b0eed002427aa599874af7a432b105");
|
||||||
consensus.BIP34Height = 21111;
|
consensus.BIP34Height = 21111;
|
||||||
@@ -250,6 +255,89 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Signet
|
||||||
|
*/
|
||||||
|
class SigNetParams : public CChainParams {
|
||||||
|
public:
|
||||||
|
explicit SigNetParams(const ArgsManager& args) {
|
||||||
|
std::vector<uint8_t> bin;
|
||||||
|
vSeeds.clear();
|
||||||
|
|
||||||
|
if (!args.IsArgSet("-signetchallenge")) {
|
||||||
|
throw std::runtime_error(strprintf("%s: -signetchallenge is mandatory for signet networks", __func__));
|
||||||
|
}
|
||||||
|
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]);
|
||||||
|
if (args.IsArgSet("-signetseednode")) {
|
||||||
|
vSeeds = args.GetArgs("-signetseednode");
|
||||||
|
}
|
||||||
|
|
||||||
|
LogPrintf("Signet with challenge %s\n", signet_challenge[0]);
|
||||||
|
|
||||||
|
strNetworkID = CBaseChainParams::SIGNET;
|
||||||
|
consensus.signet_blocks = true;
|
||||||
|
consensus.signet_challenge.assign(bin.begin(), bin.end());
|
||||||
|
consensus.nSubsidyHalvingInterval = 210000;
|
||||||
|
consensus.BIP34Height = 1;
|
||||||
|
consensus.BIP65Height = 1;
|
||||||
|
consensus.BIP66Height = 1;
|
||||||
|
consensus.CSVHeight = 1;
|
||||||
|
consensus.SegwitHeight = 1;
|
||||||
|
consensus.nPowTargetTimespan = 14 * 24 * 60 * 60; // two weeks
|
||||||
|
consensus.nPowTargetSpacing = 10 * 60;
|
||||||
|
consensus.fPowAllowMinDifficultyBlocks = false;
|
||||||
|
consensus.fPowNoRetargeting = false;
|
||||||
|
consensus.nRuleChangeActivationThreshold = 1916;
|
||||||
|
consensus.nMinerConfirmationWindow = 2016;
|
||||||
|
consensus.powLimit = uint256S("00000377ae000000000000000000000000000000000000000000000000000000");
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].bit = 28;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nStartTime = 1199145601; // January 1, 2008
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = 1230767999; // December 31, 2008
|
||||||
|
|
||||||
|
// message start is defined as the first 4 bytes of the sha256d of the block script
|
||||||
|
CHashWriter h(SER_DISK, 0);
|
||||||
|
h << consensus.signet_challenge;
|
||||||
|
uint256 hash = h.GetHash();
|
||||||
|
memcpy(pchMessageStart, hash.begin(), 4);
|
||||||
|
LogPrintf("Signet derived magic (message start): %s\n", HexStr({pchMessageStart, pchMessageStart + 4}));
|
||||||
|
|
||||||
|
nDefaultPort = 38333;
|
||||||
|
nPruneAfterHeight = 1000;
|
||||||
|
m_assumed_blockchain_size = 0;
|
||||||
|
m_assumed_chain_state_size = 0;
|
||||||
|
|
||||||
|
genesis = CreateGenesisBlock(1598918400, 52613770, 0x1e0377ae, 1, 50 * COIN);
|
||||||
|
consensus.hashGenesisBlock = genesis.GetHash();
|
||||||
|
assert(consensus.hashGenesisBlock == uint256S("0x00000008819873e925422c1ff0f99f7cc9bbb232af63a077a480a3633bee1ef6"));
|
||||||
|
assert(genesis.hashMerkleRoot == uint256S("0x4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"));
|
||||||
|
|
||||||
|
vFixedSeeds.clear();
|
||||||
|
|
||||||
|
base58Prefixes[PUBKEY_ADDRESS] = std::vector<unsigned char>(1,111);
|
||||||
|
base58Prefixes[SCRIPT_ADDRESS] = std::vector<unsigned char>(1,196);
|
||||||
|
base58Prefixes[SECRET_KEY] = std::vector<unsigned char>(1,239);
|
||||||
|
base58Prefixes[EXT_PUBLIC_KEY] = {0x04, 0x35, 0x87, 0xCF};
|
||||||
|
base58Prefixes[EXT_SECRET_KEY] = {0x04, 0x35, 0x83, 0x94};
|
||||||
|
|
||||||
|
bech32_hrp = "tb";
|
||||||
|
|
||||||
|
fDefaultConsistencyChecks = false;
|
||||||
|
fRequireStandard = true;
|
||||||
|
m_is_test_chain = true;
|
||||||
|
m_is_mockable_chain = false;
|
||||||
|
|
||||||
|
chainTxData = ChainTxData{
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Regression test
|
* Regression test
|
||||||
*/
|
*/
|
||||||
@@ -257,6 +345,8 @@ class CRegTestParams : public CChainParams {
|
|||||||
public:
|
public:
|
||||||
explicit CRegTestParams(const ArgsManager& args) {
|
explicit CRegTestParams(const ArgsManager& args) {
|
||||||
strNetworkID = CBaseChainParams::REGTEST;
|
strNetworkID = CBaseChainParams::REGTEST;
|
||||||
|
consensus.signet_blocks = false;
|
||||||
|
consensus.signet_challenge.clear();
|
||||||
consensus.nSubsidyHalvingInterval = 150;
|
consensus.nSubsidyHalvingInterval = 150;
|
||||||
consensus.BIP16Exception = uint256();
|
consensus.BIP16Exception = uint256();
|
||||||
consensus.BIP34Height = 500; // BIP34 activated on regtest (Used in functional tests)
|
consensus.BIP34Height = 500; // BIP34 activated on regtest (Used in functional tests)
|
||||||
@@ -391,12 +481,15 @@ const CChainParams &Params() {
|
|||||||
|
|
||||||
std::unique_ptr<const CChainParams> CreateChainParams(const std::string& chain)
|
std::unique_ptr<const CChainParams> CreateChainParams(const std::string& chain)
|
||||||
{
|
{
|
||||||
if (chain == CBaseChainParams::MAIN)
|
if (chain == CBaseChainParams::MAIN) {
|
||||||
return std::unique_ptr<CChainParams>(new CMainParams());
|
return std::unique_ptr<CChainParams>(new CMainParams());
|
||||||
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::REGTEST)
|
} else if (chain == CBaseChainParams::SIGNET) {
|
||||||
|
return std::unique_ptr<CChainParams>(new SigNetParams(gArgs));
|
||||||
|
} else if (chain == CBaseChainParams::REGTEST) {
|
||||||
return std::unique_ptr<CChainParams>(new CRegTestParams(gArgs));
|
return std::unique_ptr<CChainParams>(new CRegTestParams(gArgs));
|
||||||
|
}
|
||||||
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
|
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-5
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
const std::string CBaseChainParams::MAIN = "main";
|
const std::string CBaseChainParams::MAIN = "main";
|
||||||
const std::string CBaseChainParams::TESTNET = "test";
|
const std::string CBaseChainParams::TESTNET = "test";
|
||||||
|
const std::string CBaseChainParams::SIGNET = "signet";
|
||||||
const std::string CBaseChainParams::REGTEST = "regtest";
|
const std::string CBaseChainParams::REGTEST = "regtest";
|
||||||
|
|
||||||
void SetupChainParamsBaseOptions(ArgsManager& argsman)
|
void SetupChainParamsBaseOptions(ArgsManager& argsman)
|
||||||
@@ -23,6 +24,9 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman)
|
|||||||
argsman.AddArg("-segwitheight=<n>", "Set the activation height of segwit. -1 to disable. (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
argsman.AddArg("-segwitheight=<n>", "Set the activation height of segwit. -1 to disable. (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||||
argsman.AddArg("-testnet", "Use the test chain. Equivalent to -chain=test.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-testnet", "Use the test chain. Equivalent to -chain=test.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-vbparams=deployment:start:end", "Use given start/end times for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
|
argsman.AddArg("-signet", "Use the signet chain. Note that the network is defined by the -signetchallenge parameter", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
|
argsman.AddArg("-signetchallenge", "Blocks must satisfy the given script to be considered valid (only for signet networks)", ArgsManager::ALLOW_STRING, OptionsCategory::CHAINPARAMS);
|
||||||
|
argsman.AddArg("-signetseednode", "Specify a seed node for the signet network, in the hostname[:port] format, e.g. sig.net:1234 (may be used multiple times to specify multiple seed nodes)", ArgsManager::ALLOW_STRING, OptionsCategory::CHAINPARAMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::unique_ptr<CBaseChainParams> globalChainBaseParams;
|
static std::unique_ptr<CBaseChainParams> globalChainBaseParams;
|
||||||
@@ -35,14 +39,16 @@ const CBaseChainParams& BaseParams()
|
|||||||
|
|
||||||
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain)
|
std::unique_ptr<CBaseChainParams> CreateBaseChainParams(const std::string& chain)
|
||||||
{
|
{
|
||||||
if (chain == CBaseChainParams::MAIN)
|
if (chain == CBaseChainParams::MAIN) {
|
||||||
return MakeUnique<CBaseChainParams>("", 8332);
|
return MakeUnique<CBaseChainParams>("", 8332);
|
||||||
else if (chain == CBaseChainParams::TESTNET)
|
} else if (chain == CBaseChainParams::TESTNET) {
|
||||||
return MakeUnique<CBaseChainParams>("testnet3", 18332);
|
return MakeUnique<CBaseChainParams>("testnet3", 18332);
|
||||||
else if (chain == CBaseChainParams::REGTEST)
|
} else if (chain == CBaseChainParams::SIGNET) {
|
||||||
|
return MakeUnique<CBaseChainParams>("signet", 38332);
|
||||||
|
} else if (chain == CBaseChainParams::REGTEST) {
|
||||||
return MakeUnique<CBaseChainParams>("regtest", 18443);
|
return MakeUnique<CBaseChainParams>("regtest", 18443);
|
||||||
else
|
}
|
||||||
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
|
throw std::runtime_error(strprintf("%s: Unknown chain %s.", __func__, chain));
|
||||||
}
|
}
|
||||||
|
|
||||||
void SelectBaseParams(const std::string& chain)
|
void SelectBaseParams(const std::string& chain)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public:
|
|||||||
/** Chain name strings */
|
/** Chain name strings */
|
||||||
static const std::string MAIN;
|
static const std::string MAIN;
|
||||||
static const std::string TESTNET;
|
static const std::string TESTNET;
|
||||||
|
static const std::string SIGNET;
|
||||||
static const std::string REGTEST;
|
static const std::string REGTEST;
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
|
|||||||
@@ -1106,7 +1106,7 @@ BOOST_FIXTURE_TEST_CASE(util_ChainMerge, ChainMergeTestingSetup)
|
|||||||
// Results file is formatted like:
|
// Results file is formatted like:
|
||||||
//
|
//
|
||||||
// <input> || <output>
|
// <input> || <output>
|
||||||
BOOST_CHECK_EQUAL(out_sha_hex, "f0b3a3c29869edc765d579c928f7f1690a71fbb673b49ccf39cbc4de18156a0d");
|
BOOST_CHECK_EQUAL(out_sha_hex, "f263493e300023b6509963887444c41386f44b63bc30047eb8402e8c1144854c");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
BOOST_AUTO_TEST_CASE(util_ReadWriteSettings)
|
||||||
|
|||||||
+8
-2
@@ -263,6 +263,7 @@ const std::list<SectionInfo> ArgsManager::GetUnrecognizedSections() const
|
|||||||
// Section names to be recognized in the config file.
|
// Section names to be recognized in the config file.
|
||||||
static const std::set<std::string> available_sections{
|
static const std::set<std::string> available_sections{
|
||||||
CBaseChainParams::REGTEST,
|
CBaseChainParams::REGTEST,
|
||||||
|
CBaseChainParams::SIGNET,
|
||||||
CBaseChainParams::TESTNET,
|
CBaseChainParams::TESTNET,
|
||||||
CBaseChainParams::MAIN
|
CBaseChainParams::MAIN
|
||||||
};
|
};
|
||||||
@@ -916,16 +917,21 @@ std::string ArgsManager::GetChainName() const
|
|||||||
};
|
};
|
||||||
|
|
||||||
const bool fRegTest = get_net("-regtest");
|
const bool fRegTest = get_net("-regtest");
|
||||||
|
const bool fSigNet = get_net("-signet");
|
||||||
const bool fTestNet = get_net("-testnet");
|
const bool fTestNet = get_net("-testnet");
|
||||||
const bool is_chain_arg_set = IsArgSet("-chain");
|
const bool is_chain_arg_set = IsArgSet("-chain");
|
||||||
|
|
||||||
if ((int)is_chain_arg_set + (int)fRegTest + (int)fTestNet > 1) {
|
if ((int)is_chain_arg_set + (int)fRegTest + (int)fSigNet + (int)fTestNet > 1) {
|
||||||
throw std::runtime_error("Invalid combination of -regtest, -testnet and -chain. Can use at most one.");
|
throw std::runtime_error("Invalid combination of -regtest, -signet, -testnet and -chain. Can use at most one.");
|
||||||
}
|
}
|
||||||
if (fRegTest)
|
if (fRegTest)
|
||||||
return CBaseChainParams::REGTEST;
|
return CBaseChainParams::REGTEST;
|
||||||
|
if (fSigNet) {
|
||||||
|
return CBaseChainParams::SIGNET;
|
||||||
|
}
|
||||||
if (fTestNet)
|
if (fTestNet)
|
||||||
return CBaseChainParams::TESTNET;
|
return CBaseChainParams::TESTNET;
|
||||||
|
|
||||||
return GetArg("-chain", CBaseChainParams::MAIN);
|
return GetArg("-chain", CBaseChainParams::MAIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user