From a39d381d56081814a3541e02ae8344700061eeaf Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Tue, 25 Mar 2025 16:39:16 +0700 Subject: [PATCH 1/2] tests: improve logging for feature asset locks functional test --- test/functional/feature_asset_locks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/feature_asset_locks.py b/test/functional/feature_asset_locks.py index 9847fa99c30e..ff842d866c86 100755 --- a/test/functional/feature_asset_locks.py +++ b/test/functional/feature_asset_locks.py @@ -102,7 +102,7 @@ def create_assetunlock(self, index, withdrawal, pubkey=None, fee=tiny_amount): request_id = hash256(request_id_buf)[::-1].hex() height = node_wallet.getblockcount() - self.log.info(f"Creating asset unlock: {llmq_type_test} {request_id}") + self.log.info(f"Creating asset unlock: index={index} {request_id}") quorumHash = mninfo[0].node.quorum("selectquorum", llmq_type_test, request_id)["quorumHash"] self.log.info(f"Used quorum hash: {quorumHash}") unlockTx_payload = CAssetUnlockTx( From 77dd25900406fecb6fa32e1cced16c1cfd5d8cc8 Mon Sep 17 00:00:00 2001 From: Konstantin Akimov Date: Sat, 22 Mar 2025 13:10:21 +0700 Subject: [PATCH 2/2] feat: bury WITHDRAWALS deployment --- src/chainparams.cpp | 46 +++++-------------------------- src/consensus/params.h | 8 ++++-- src/deploymentinfo.cpp | 6 ++-- src/rpc/blockchain.cpp | 5 ++-- test/functional/rpc_blockchain.py | 12 +------- 5 files changed, 19 insertions(+), 58 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 020467aa4c9b..85b12f7836bd 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -193,7 +193,8 @@ class CMainParams : public CChainParams { consensus.V19Height = 1899072; // 0000000000000015e32e73052d663626327004c81c5c22cb8b42c361015c0eae consensus.V20Height = 1987776; // 000000000000001bf41cff06b76780050682ca29e61a91c391893d4745579777 consensus.MN_RRHeight = 2128896; // 0000000000000009a9696da93d3807eb14eb00a4ff449206d689156a21b27f26 - consensus.MinBIP9WarningHeight = 2128896 + 2016; // mn_rr activation height + miner confirmation window + consensus.WithdrawalsHeight = 2201472; // 00000000000000210518749e17c00b035a2a4982c906236c28c41ea2231bf7ef + consensus.MinBIP9WarningHeight = 2201472 + 2016; // withdrawals activation height + miner confirmation window consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20 consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes @@ -208,15 +209,6 @@ class CMainParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].bit = 11; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nStartTime = 1728864000; // October 14, 2024 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nTimeout = 1760400000; // October 14, 2025 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nWindowSize = 4032; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdStart = 3226; // 80% of 4032 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdMin = 2420; // 60% of 4032 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; - consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12; consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025 consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = 1782864000; // July 1, 2026 @@ -399,7 +391,8 @@ class CTestNetParams : public CChainParams { consensus.V19Height = 850100; // 000004728b8ff2a16b9d4eebb0fd61eeffadc9c7fe4b0ec0b5a739869401ab5b consensus.V20Height = 905100; // 0000020c5e0f86f385cbf8e90210de9a9fd63633f01433bf47a6b3227a2851fd consensus.MN_RRHeight = 1066900; // 000000d05d445958a9a4ad6bdc0f4bfb25af124b2326060703373ff2d3b397e9 - consensus.MinBIP9WarningHeight = 1066900 + 2016; // mn_rr activation height + miner confirmation window + consensus.WithdrawalsHeight = 1148500; // 000000212a6fec2ee2af040c6d7a176360b154cbaa998888170cfd9ae7dd632d + consensus.MinBIP9WarningHeight = 1148500 + 2016; // withdrawals activation height + miner confirmation window consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20 consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes @@ -414,15 +407,6 @@ class CTestNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].bit = 11; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nStartTime = 1728864000; // October 14, 2024 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nWindowSize = 100; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdStart = 80; // 80% of 100 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdMin = 60; // 60% of 100 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; - consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12; consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025 consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -580,7 +564,8 @@ class CDevNetParams : public CChainParams { consensus.V19Height = 2; // V19 activated immediately on devnet consensus.V20Height = 2; // V20 activated immediately on devnet consensus.MN_RRHeight = 2; // MN_RR activated immediately on devnet - consensus.MinBIP9WarningHeight = 2 + 2016; // v19 activation height + miner confirmation window + consensus.WithdrawalsHeight = 2; // withdrawals activated immediately on devnet + consensus.MinBIP9WarningHeight = 2 + 2016; // withdrawals activation height + miner confirmation window consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 1 consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes @@ -595,15 +580,6 @@ class CDevNetParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].bit = 11; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nStartTime = 1704067200; // January 1, 2024 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nWindowSize = 120; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdStart = 80; // 80% of 100 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdMin = 60; // 60% of 100 - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; - consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12; consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 1751328000; // July 1, 2025 consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; @@ -824,6 +800,7 @@ class CRegTestParams : public CChainParams { consensus.V19Height = 1; // Always active unless overriden consensus.V20Height = consensus.DIP0003Height; // Active not earlier than dip0003. Functional tests (DashTestFramework) uses height 100 (same as coinbase maturity) consensus.MN_RRHeight = consensus.V20Height; // MN_RR does not really have effect before v20 activation + consensus.WithdrawalsHeight = 600; consensus.MinBIP9WarningHeight = 0; consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 1 consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day @@ -840,15 +817,6 @@ class CRegTestParams : public CChainParams { consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].min_activation_height = 0; // No activation delay - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].bit = 11; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nStartTime = 0; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nWindowSize = 200; - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdStart = 200 / 5 * 4; // 80% of window size - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nThresholdMin = 200 / 5 * 3; // 60% of window size - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].nFalloffCoeff = 5; // this corresponds to 10 periods - consensus.vDeployments[Consensus::DEPLOYMENT_WITHDRAWALS].useEHF = true; - consensus.vDeployments[Consensus::DEPLOYMENT_V23].bit = 12; consensus.vDeployments[Consensus::DEPLOYMENT_V23].nStartTime = 0; consensus.vDeployments[Consensus::DEPLOYMENT_V23].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT; diff --git a/src/consensus/params.h b/src/consensus/params.h index 854725286ebd..c0457060f2aa 100644 --- a/src/consensus/params.h +++ b/src/consensus/params.h @@ -34,12 +34,12 @@ enum BuriedDeployment : int16_t { DEPLOYMENT_V19, DEPLOYMENT_V20, DEPLOYMENT_MN_RR, + DEPLOYMENT_WITHDRAWALS, }; -constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_MN_RR; } +constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_WITHDRAWALS; } enum DeploymentPos : uint16_t { DEPLOYMENT_TESTDUMMY, - DEPLOYMENT_WITHDRAWALS, // Deployment of Fix for quorum selection for withdrawals DEPLOYMENT_V23, // Deployment of doubling withdrawal limit, extended addresses // NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp MAX_VERSION_BITS_DEPLOYMENTS @@ -147,6 +147,8 @@ struct Params { int V20Height; /** Block height at which MN_RR (Deployment of Masternode Reward Location Reallocation) becomes active */ int MN_RRHeight; + /** Block height at which WITHDRAWALS (Deployment of quorum fix and higher limits for withdrawals) becomes active */ + int WithdrawalsHeight; /** Don't warn about unknown BIP 9 activations below this height. * This prevents us from warning about the CSV and DIP activations. */ int MinBIP9WarningHeight; @@ -214,6 +216,8 @@ struct Params { return V20Height; case DEPLOYMENT_MN_RR: return MN_RRHeight; + case DEPLOYMENT_WITHDRAWALS: + return WithdrawalsHeight; } // no default case, so the compiler can warn about missing cases return std::numeric_limits::max(); } diff --git a/src/deploymentinfo.cpp b/src/deploymentinfo.cpp index 07630bc7672d..cc84c2777761 100644 --- a/src/deploymentinfo.cpp +++ b/src/deploymentinfo.cpp @@ -11,10 +11,6 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B /*.name =*/ "testdummy", /*.gbt_force =*/ true, }, - { - /*.name =*/"withdrawals", - /*.gbt_force =*/true, - }, { /*.name =*/"v23", /*.gbt_force =*/true, @@ -53,6 +49,8 @@ std::string DeploymentName(Consensus::BuriedDeployment dep) return "v20"; case Consensus::DEPLOYMENT_MN_RR: return "mn_rr"; + case Consensus::DEPLOYMENT_WITHDRAWALS: + return "withdrawals"; } // no default case, so the compiler can warn about missing cases return ""; } diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp index 8245b57beaeb..c1da2b54bb92 100644 --- a/src/rpc/blockchain.cpp +++ b/src/rpc/blockchain.cpp @@ -1536,11 +1536,12 @@ RPCHelpMan getblockchaininfo() Consensus::DEPLOYMENT_BRR, Consensus::DEPLOYMENT_V19, Consensus::DEPLOYMENT_V20, - Consensus::DEPLOYMENT_MN_RR }) { + Consensus::DEPLOYMENT_MN_RR, + Consensus::DEPLOYMENT_WITHDRAWALS, + }) { SoftForkDescPushBack(&tip, softforks, consensusParams, deploy); } for (auto ehf_deploy : { /* sorted by activation block */ - Consensus::DEPLOYMENT_WITHDRAWALS, Consensus::DEPLOYMENT_V23, Consensus::DEPLOYMENT_TESTDUMMY }) { SoftForkDescPushBack(&tip, ehfSignals, softforks, consensusParams, ehf_deploy); diff --git a/test/functional/rpc_blockchain.py b/test/functional/rpc_blockchain.py index fd4ea46e1b84..b933d359f58d 100755 --- a/test/functional/rpc_blockchain.py +++ b/test/functional/rpc_blockchain.py @@ -214,17 +214,7 @@ def _test_getblockchaininfo(self): 'v19': { 'type': 'buried', 'active': True, 'height': 15}, 'v20': { 'type': 'buried', 'active': False, 'height': 412}, 'mn_rr': { 'type': 'buried', 'active': False, 'height': 413}, - 'withdrawals': { - 'type': 'bip9', - 'bip9': { - 'status': 'defined', - 'start_time': 0, - 'timeout': 9223372036854775807, # "withdrawals" does not have a timeout so is set to the max int64 value - 'since': 0, - 'min_activation_height': 0, - 'ehf': True - }, - 'active': False}, + 'withdrawals': { 'type': 'buried', 'active': False, 'height': 600}, 'v23': { 'type': 'bip9', 'bip9': {