Skip to content

Commit 1852fa2

Browse files
committed
feat: introduce DEPLOYMENT_EXTADDR deployment
1 parent 6aa7a96 commit 1852fa2

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
@@ -1339,7 +1339,7 @@ static std::optional<ProTx> GetValidatedPayload(const CTransaction& tx, gsl::not
13391339
return std::nullopt;
13401340
}
13411341
const bool is_basic_scheme_active{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
1342-
const bool is_extended_addr{false};
1342+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
13431343
if (!opt_ptx->IsTriviallyValid(is_basic_scheme_active, is_extended_addr, state)) {
13441344
// pass the state returned by the function above
13451345
return std::nullopt;
@@ -1357,7 +1357,7 @@ bool CheckProRegTx(CDeterministicMNManager& dmnman, const CTransaction& tx, gsl:
13571357

13581358
// 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
13591359
// If any of both is set, it must be valid however
1360-
const bool is_extended_addr{false};
1360+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
13611361
if (!opt_ptx->netInfo->IsEmpty() && !CheckService(*opt_ptx, is_extended_addr, state)) {
13621362
// pass the state returned by the function above
13631363
return false;
@@ -1478,7 +1478,7 @@ bool CheckProUpServTx(CDeterministicMNManager& dmnman, const CTransaction& tx, g
14781478
return false;
14791479
}
14801480

1481-
const bool is_extended_addr{false};
1481+
const bool is_extended_addr{DeploymentActiveAfter(pindexPrev, Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
14821482
if (!CheckService(*opt_ptx, is_extended_addr, state)) {
14831483
// pass the state returned by the function above
14841484
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
@@ -654,10 +654,12 @@ static UniValue protx_register_common_wrapper(const JSONRPCRequest& request,
654654
tx.nType = TRANSACTION_PROVIDER_REGISTER;
655655

656656
const bool use_legacy = specific_legacy_bls_scheme;
657+
const bool is_extended_addr{DeploymentActiveAfter(WITH_LOCK(::cs_main, return chainman.ActiveChain().Tip()),
658+
Params().GetConsensus(), Consensus::DEPLOYMENT_EXTADDR)};
657659

658660
CProRegTx ptx;
659661
ptx.nType = mnType;
660-
ptx.nVersion = CProRegTx::GetMaxVersion(/*is_basic_scheme_active=*/!use_legacy, /*is_extended_addr=*/false);
662+
ptx.nVersion = CProRegTx::GetMaxVersion(/*is_basic_scheme_active=*/!use_legacy, is_extended_addr);
661663
ptx.netInfo = MakeNetInfo(ptx);
662664

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

src/test/evo_trivialvalidation.cpp

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