Skip to content

Commit 98749a7

Browse files
committed
feat: define BIP 9 fork DEPLOYMENT_V23 for new version featureset
1 parent 06de2b0 commit 98749a7

File tree

5 files changed

+53
-0
lines changed

5 files changed

+53
-0
lines changed

src/chainparams.cpp

+36
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,15 @@ class CMainParams : public CChainParams {
217217
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods
218218
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true;
219219

220+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12;
221+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025
222+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = 1782864000; // July 1, 2026
223+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nWindowSize = 4032;
224+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdStart = 3226; // 80% of 4032
225+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdMin = 2420; // 60% of 4032
226+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nFalloffCoeff = 5; // this corresponds to 10 periods
227+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].useEHF = true;
228+
220229
// The best chain should have at least this much work.
221230
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000a39050764808db046f5c"); // 2216986
222231

@@ -414,6 +423,15 @@ class CTestNetParams : public CChainParams {
414423
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods
415424
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true;
416425

426+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12;
427+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025
428+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
429+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nWindowSize = 100;
430+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdStart = 80; // 80% of 100
431+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdMin = 60; // 60% of 100
432+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nFalloffCoeff = 5; // this corresponds to 10 periods
433+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].useEHF = true;
434+
417435
// The best chain should have at least this much work.
418436
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000031f769ba78b4bee"); // 1189000
419437

@@ -586,6 +604,15 @@ class CDevNetParams : public CChainParams {
586604
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods
587605
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true;
588606

607+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12;
608+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025
609+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
610+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nWindowSize = 120;
611+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdStart = 96; // 80% of 120
612+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdMin = 72; // 60% of 120
613+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nFalloffCoeff = 5; // this corresponds to 10 periods
614+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].useEHF = true;
615+
589616
// The best chain should have at least this much work.
590617
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000000000000000");
591618

@@ -822,6 +849,15 @@ class CRegTestParams : public CChainParams {
822849
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods
823850
consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true;
824851

852+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12;
853+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 0;
854+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
855+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nWindowSize = 350;
856+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdStart = 350 / 5 * 4; // 80% of window size
857+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nThresholdMin = 350 / 5 * 3; // 60% of window size
858+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].nFalloffCoeff = 5; // this corresponds to 10 periods
859+
consensus.vDeployments[Consensus::DEPLOYMENT_V23].useEHF = true;
860+
825861
// The best chain should have at least this much work.
826862
consensus.nMinimumChainWork = uint256S("0x00");
827863

src/consensus/params.h

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_
4040
enum DeploymentPos : uint16_t {
4141
DEPLOYMENT_TESTDUMMY,
4242
DEPLOYMENT_WITHDRAWALS, // Deployment of Fix for quorum selection for withdrawals
43+
DEPLOYMENT_V23, // Deployment of doubling withdrawal limit, extended addresses
4344
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
4445
MAX_VERSION_BITS_DEPLOYMENTS
4546
};

src/deploymentinfo.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B
1515
/*.name =*/"withdrawals",
1616
/*.gbt_force =*/true,
1717
},
18+
{
19+
/*.name =*/"v23",
20+
/*.gbt_force =*/true,
21+
},
1822
};
1923

2024
std::string DeploymentName(Consensus::BuriedDeployment dep)

src/rpc/blockchain.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -1543,6 +1543,7 @@ RPCHelpMan getblockchaininfo()
15431543
}
15441544
for (auto ehf_deploy : { /* sorted by activation block */
15451545
Consensus::DEPLOYMENT_WITHDRAWALS,
1546+
Consensus::DEPLOYMENT_V23,
15461547
Consensus::DEPLOYMENT_TESTDUMMY }) {
15471548
SoftForkDescPushBack(&tip, ehfSignals, softforks, consensusParams, ehf_deploy);
15481549
}

test/functional/rpc_blockchain.py

+11
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,17 @@ def _test_getblockchaininfo(self):
225225
'ehf': True
226226
},
227227
'active': False},
228+
'v23': {
229+
'type': 'bip9',
230+
'bip9': {
231+
'status': 'defined',
232+
'start_time': 0,
233+
'timeout': 9223372036854775807, # "v23" does not have a timeout so is set to the max int64 value
234+
'since': 0,
235+
'min_activation_height': 0,
236+
'ehf': True
237+
},
238+
'active': False},
228239
'testdummy': {
229240
'type': 'bip9',
230241
'bip9': {

0 commit comments

Comments
 (0)