Skip to content

Commit 7a9bfa2

Browse files
committed
feat: introduce DEPLOYMENT_EXTADDR fork deployment
1 parent 62797a3 commit 7a9bfa2

File tree

8 files changed

+60
-5
lines changed

8 files changed

+60
-5
lines changed

src/chainparams.cpp

Lines changed: 36 additions & 0 deletions
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_EXTADDR].bit = 12;
221+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nStartTime = 1744675200; // April 15, 2025
222+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nTimeout = 1776211200; // April 15, 2026
223+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nWindowSize = 4032;
224+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdStart = 3226; // 80% of 4032
225+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdMin = 2420; // 60% of 4032
226+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nFalloffCoeff = 5; // this corresponds to 10 periods
227+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].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_EXTADDR].bit = 12;
427+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nStartTime = 1744675200; // April 15, 2025
428+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
429+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nWindowSize = 100;
430+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdStart = 80; // 80% of 100
431+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdMin = 60; // 60% of 100
432+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nFalloffCoeff = 5; // this corresponds to 10 periods
433+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].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_EXTADDR].bit = 12;
608+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nStartTime = 1704067200; // January 1, 2024
609+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
610+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nWindowSize = 120;
611+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdStart = 80; // 80% of 100
612+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdMin = 60; // 60% of 100
613+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nFalloffCoeff = 5; // this corresponds to 10 periods
614+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].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_EXTADDR].bit = 12;
853+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nStartTime = 0;
854+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
855+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nWindowSize = 200;
856+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdStart = 200 / 5 * 4; // 80% of window size
857+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nThresholdMin = 200 / 5 * 3; // 60% of window size
858+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].nFalloffCoeff = 5; // this corresponds to 10 periods
859+
consensus.vDeployments[Consensus::DEPLOYMENT_EXTADDR].useEHF = true;
860+
825861
// The best chain should have at least this much work.
826862
consensus.nMinimumChainWork = uint256S("0x00");
827863

src/consensus/params.h

Lines changed: 1 addition & 0 deletions
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_EXTADDR, // Deployment of extended addresses support
4344
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
4445
MAX_VERSION_BITS_DEPLOYMENTS
4546
};

src/deploymentinfo.cpp

Lines changed: 4 additions & 0 deletions
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 =*/"extaddr",
20+
/*.gbt_force =*/true,
21+
},
1822
};
1923

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

src/evo/deterministicmns.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,7 +1381,7 @@ static std::optional<ProTx> GetValidatedPayload(const CTransaction& tx, gsl::not
13811381
return std::nullopt;
13821382
}
13831383
const bool is_basic_scheme_active{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
1384-
const bool is_extended_addr{false};
1384+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
13851385
if (!opt_ptx->IsTriviallyValid(is_basic_scheme_active, is_extended_addr, state)) {
13861386
// pass the state returned by the function above
13871387
return std::nullopt;
@@ -1399,7 +1399,7 @@ bool CheckProRegTx(CDeterministicMNManager& dmnman, const CTransaction& tx, gsl:
13991399

14001400
// It's allowed to set addr to 0, which will put the MN into PoSe-banned state and require a ProUpServTx to be issues later
14011401
// If any of both is set, it must be valid however
1402-
const bool is_extended_addr{false};
1402+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
14031403
if (!opt_ptx->netInfo->IsEmpty() && (!IsNetInfoTriviallyValid(*opt_ptx, is_extended_addr, state) || !CheckService(*opt_ptx, state))) {
14041404
// pass the state returned by the function above
14051405
return false;
@@ -1524,7 +1524,7 @@ bool CheckProUpServTx(CDeterministicMNManager& dmnman, const CTransaction& tx, g
15241524
return false;
15251525
}
15261526

1527-
const bool is_extended_addr{false};
1527+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
15281528
if (!IsNetInfoTriviallyValid(*opt_ptx, is_extended_addr, state) || !CheckService(*opt_ptx, state)) {
15291529
// pass the state returned by the function above
15301530
return false;

src/rpc/blockchain.cpp

Lines changed: 1 addition & 0 deletions
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_EXTADDR,
15461547
Consensus::DEPLOYMENT_TESTDUMMY }) {
15471548
SoftForkDescPushBack(&tip, ehfSignals, softforks, consensusParams, ehf_deploy);
15481549
}

src/rpc/evo.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -648,10 +648,12 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
648648
tx.nType = TRANSACTION_PROVIDER_REGISTER;
649649

650650
const bool use_legacy = specific_legacy_bls_scheme;
651+
const bool is_extended_addr{DeploymentActiveAfter(
652+
WITH_LOCK(::cs_main, return chainman.ActiveChain().Tip()), Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
651653

652654
CProRegTx ptx;
653655
ptx.nType = mnType;
654-
ptx.nVersion = CProRegTx::GetMaxVersion(/*is_basic_scheme_active=*/!use_legacy, /*is_extended_addr=*/false);
656+
ptx.nVersion = CProRegTx::GetMaxVersion(/*is_basic_scheme_active=*/!use_legacy, is_extended_addr);
655657
ptx.netInfo = MakeNetInfo(ptx);
656658

657659
if (action == ProTxRegisterAction::Fund) {

src/test/evo_trivialvalidation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ void trivialvalidation_runner(const std::string& json)
5151
txType = test[1].get_str();
5252
BOOST_CHECK(test[2].get_str() == "basic" || test[2].get_str() == "legacy");
5353
bool is_basic_bls = test[2].get_str() == "basic";
54-
bool is_extended_addr{false};
54+
bool is_extended_addr{false}; // TODO: Introduce trivial validation test vectors for extended addresses
5555
// Raw transaction
5656
CDataStream stream(ParseHex(test[3].get_str()), SER_NETWORK, PROTOCOL_VERSION);
5757
stream >> tx;

test/functional/rpc_blockchain.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,17 @@ def _test_getblockchaininfo(self):
225225
'ehf': True
226226
},
227227
'active': False},
228+
'extaddr': {
229+
'type': 'bip9',
230+
'bip9': {
231+
'status': 'defined',
232+
'start_time': 0,
233+
'timeout': 9223372036854775807, # "extaddr" 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)