Skip to content

Commit 2d57e25

Browse files
committed
chainparams: Add support for renouncing an HereticalDeployment
1 parent d1aba93 commit 2d57e25

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

src/chainparams.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,25 @@
2323

2424
using util::SplitString;
2525

26+
static void HandleRenounceArgs(const ArgsManager& args, CChainParams::RenounceParameters& renounce)
27+
{
28+
if (!args.IsArgSet("-renounce")) return;
29+
for (const std::string& dep_name : args.GetArgs("-renounce")) {
30+
bool found = false;
31+
for (int j = 0; j < (int)Consensus::MAX_VERSION_BITS_DEPLOYMENTS; ++j) {
32+
if (dep_name == VersionBitsDeploymentInfo[j].name) {
33+
renounce.emplace_back(static_cast<Consensus::BuriedDeployment>(j));
34+
found = true;
35+
LogPrintf("Disabling deployment %s\n", dep_name);
36+
break;
37+
}
38+
}
39+
if (!found) {
40+
throw std::runtime_error(strprintf("Invalid deployment (%s)", dep_name));
41+
}
42+
}
43+
}
44+
2645
void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& options)
2746
{
2847
if (args.IsArgSet("-signetseednode")) {
@@ -39,6 +58,7 @@ void ReadSigNetArgs(const ArgsManager& args, CChainParams::SigNetOptions& option
3958
}
4059
options.challenge.emplace(*val);
4160
}
61+
HandleRenounceArgs(args, options.renounce);
4262
}
4363

4464
void ReadRegTestArgs(const ArgsManager& args, CChainParams::RegTestOptions& options)
@@ -65,6 +85,8 @@ void ReadRegTestArgs(const ArgsManager& args, CChainParams::RegTestOptions& opti
6585
}
6686
}
6787

88+
HandleRenounceArgs(args, options.renounce);
89+
6890
if (!args.IsArgSet("-vbparams")) return;
6991

7092
for (const std::string& strDeployment : args.GetArgs("-vbparams")) {

src/chainparamsbase.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman)
2020
argsman.AddArg("-testnet", "Use the testnet3 chain. Equivalent to -chain=test. Support for testnet3 is deprecated and will be removed in an upcoming release. Consider moving to testnet4 now by using -testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
2121
argsman.AddArg("-testnet4", "Use the testnet4 chain. Equivalent to -chain=testnet4.", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
2222
argsman.AddArg("-vbparams=deployment:start:end[:min_activation_height]", "Use given start/end times and min_activation_height for specified version bits deployment (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
23+
argsman.AddArg("-renounce=deployment", "Unconditionally disable an heretical deployment attempt", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
2324
argsman.AddArg("-signet", "Use the signet chain. Equivalent to -chain=signet. Note that the network is defined by the -signetchallenge parameter", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
2425
argsman.AddArg("-signetchallenge", "Blocks must satisfy the given script to be considered valid (only for signet networks; defaults to the global default signet test network challenge)", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::CHAINPARAMS);
2526
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; defaults to the global default signet test network seed node(s))", ArgsManager::ALLOW_ANY | ArgsManager::DISALLOW_NEGATION, OptionsCategory::CHAINPARAMS);

src/kernel/chainparams.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits
7575
return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
7676
}
7777

78+
template<size_t N>
79+
static void RenounceDeployments(const CChainParams::RenounceParameters& renounce, Consensus::HereticalDeployment (&vDeployments)[N])
80+
{
81+
for (Consensus::BuriedDeployment dep : renounce) {
82+
vDeployments[dep].nStartTime = Consensus::HereticalDeployment::NEVER_ACTIVE;
83+
vDeployments[dep].nTimeout = Consensus::HereticalDeployment::NO_TIMEOUT;
84+
}
85+
}
86+
7887
namespace {
7988
struct SetupDeployment
8089
{
@@ -473,6 +482,8 @@ class SigNetParams : public CChainParams {
473482
consensus.powLimit = uint256{"00000377ae000000000000000000000000000000000000000000000000000000"};
474483
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY] = SetupDeployment{.activate = 0x30000000, .abandon = 0, .never = true};
475484

485+
RenounceDeployments(options.renounce, consensus.vDeployments);
486+
476487
// message start is defined as the first 4 bytes of the sha256d of the block script
477488
HashWriter h{};
478489
h << consensus.signet_challenge;
@@ -584,6 +595,8 @@ class CRegTestParams : public CChainParams
584595
consensus.vDeployments[deployment_pos].nTimeout = version_bits_params.timeout;
585596
}
586597

598+
RenounceDeployments(opts.renounce, consensus.vDeployments);
599+
587600
genesis = CreateGenesisBlock(1296688602, 2, 0x207fffff, 1, 50 * COIN);
588601
consensus.hashGenesisBlock = genesis.GetHash();
589602
assert(consensus.hashGenesisBlock == uint256{"0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206"});

src/kernel/chainparams.h

+4
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,15 @@ class CChainParams
136136

137137
const ChainTxData& TxData() const { return chainTxData; }
138138

139+
using RenounceParameters = std::vector<Consensus::BuriedDeployment>;
140+
139141
/**
140142
* SigNetOptions holds configurations for creating a signet CChainParams.
141143
*/
142144
struct SigNetOptions {
143145
std::optional<std::vector<uint8_t>> challenge{};
144146
std::optional<std::vector<std::string>> seeds{};
147+
RenounceParameters renounce{};
145148
};
146149

147150
/**
@@ -158,6 +161,7 @@ class CChainParams
158161
struct RegTestOptions {
159162
std::unordered_map<Consensus::DeploymentPos, VersionBitsParameters> version_bits_parameters{};
160163
std::unordered_map<Consensus::BuriedDeployment, int> activation_heights{};
164+
RenounceParameters renounce{};
161165
bool fastprune{false};
162166
};
163167

0 commit comments

Comments
 (0)