mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
feat!: v19 BIP9 fork (#5070)
* Added v19 HF * Refactoring * Update src/consensus/params.h Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com> Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
This commit is contained in:
parent
6ee156c69e
commit
85d6cadbfa
@ -249,6 +249,15 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 2420; // 60% of 4032
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 2420; // 60% of 4032
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
|
// Deployment of Deployment of Basic BLS, AssetLocks, EHF
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].bit = 8;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nStartTime = 19999999999; // TODO: To be determined later
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nTimeout = 999999999999ULL;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nWindowSize = 4032;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdStart = 3226; // 80% of 4032
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdMin = 2420; // 60% of 4032
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000079c96bdb79315818b358"); // 1756000
|
consensus.nMinimumChainWork = uint256S("0x0000000000000000000000000000000000000000000079c96bdb79315818b358"); // 1756000
|
||||||
|
|
||||||
@ -474,6 +483,15 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 60; // 60% of 100
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 60; // 60% of 100
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
|
// Deployment of Deployment of Basic BLS, AssetLocks, EHF
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].bit = 8;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nStartTime = 19999999999; // TODO: To be determined later
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nTimeout = 999999999999ULL;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nWindowSize = 100;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdStart = 80; // 80% of 100
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdMin = 60; // 60% of 100
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000002d68c333d26a1b3"); // 817000
|
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000000002d68c333d26a1b3"); // 817000
|
||||||
|
|
||||||
@ -670,6 +688,15 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 60; // 60% of 100
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 60; // 60% of 100
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
|
// Deployment of Deployment of Basic BLS, AssetLocks, EHF
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].bit = 8;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nStartTime = 1661990400; // Sep 1st, 2022
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nTimeout = 999999999999ULL;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nWindowSize = 100;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdStart = 80; // 80% of 100
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdMin = 60; // 60% of 100
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000000000000000");
|
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000000000000000000");
|
||||||
|
|
||||||
@ -911,6 +938,15 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 180; // 60% of 300
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nThresholdMin = 180; // 60% of 300
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
consensus.vDeployments[Consensus::DEPLOYMENT_DIP0024].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
|
// Deployment of Deployment of Basic BLS, AssetLocks, EHF
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].bit = 8;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nStartTime = 0;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nTimeout = 999999999999ULL;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nWindowSize = 300;
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdStart = 240; // 80% of 300
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nThresholdMin = 180; // 60% of 300
|
||||||
|
consensus.vDeployments[Consensus::DEPLOYMENT_V19].nFalloffCoeff = 5; // this corresponds to 10 periods
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x00");
|
consensus.nMinimumChainWork = uint256S("0x00");
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ enum DeploymentPos {
|
|||||||
DEPLOYMENT_REALLOC, // Deployment of Block Reward Reallocation
|
DEPLOYMENT_REALLOC, // Deployment of Block Reward Reallocation
|
||||||
DEPLOYMENT_DIP0020, // Deployment of DIP0020, DIP0021 and LMQ_100_67 quorums
|
DEPLOYMENT_DIP0020, // Deployment of DIP0020, DIP0021 and LMQ_100_67 quorums
|
||||||
DEPLOYMENT_DIP0024, // Deployment of DIP0024 (Quorum Rotation) and decreased governance proposal fee
|
DEPLOYMENT_DIP0024, // Deployment of DIP0024 (Quorum Rotation) and decreased governance proposal fee
|
||||||
|
DEPLOYMENT_V19, // Deployment of Basic BLS, AssetLocks, EHF
|
||||||
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp
|
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in versionbits.cpp
|
||||||
MAX_VERSION_BITS_DEPLOYMENTS
|
MAX_VERSION_BITS_DEPLOYMENTS
|
||||||
};
|
};
|
||||||
|
@ -598,6 +598,14 @@ bool IsDIP0024Active(const CBlockIndex* pindex)
|
|||||||
return VersionBitsState(pindex, Params().GetConsensus(), Consensus::DEPLOYMENT_DIP0024, llmq_versionbitscache) == ThresholdState::ACTIVE;
|
return VersionBitsState(pindex, Params().GetConsensus(), Consensus::DEPLOYMENT_DIP0024, llmq_versionbitscache) == ThresholdState::ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsV19Active(const CBlockIndex* pindex)
|
||||||
|
{
|
||||||
|
assert(pindex);
|
||||||
|
|
||||||
|
LOCK(cs_llmq_vbc);
|
||||||
|
return VersionBitsState(pindex, Params().GetConsensus(), Consensus::DEPLOYMENT_V19, llmq_versionbitscache) == ThresholdState::ACTIVE;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsInstantSendLLMQTypeShared()
|
bool IsInstantSendLLMQTypeShared()
|
||||||
{
|
{
|
||||||
if (Params().GetConsensus().llmqTypeInstantSend == Params().GetConsensus().llmqTypeChainLocks ||
|
if (Params().GetConsensus().llmqTypeInstantSend == Params().GetConsensus().llmqTypeChainLocks ||
|
||||||
|
@ -93,6 +93,7 @@ bool IsQuorumRotationEnabled(Consensus::LLMQType llmqType, const CBlockIndex* pi
|
|||||||
Consensus::LLMQType GetInstantSendLLMQType(const CQuorumManager& qman, const CBlockIndex* pindex);
|
Consensus::LLMQType GetInstantSendLLMQType(const CQuorumManager& qman, const CBlockIndex* pindex);
|
||||||
Consensus::LLMQType GetInstantSendLLMQType(bool deterministic);
|
Consensus::LLMQType GetInstantSendLLMQType(bool deterministic);
|
||||||
bool IsDIP0024Active(const CBlockIndex* pindex);
|
bool IsDIP0024Active(const CBlockIndex* pindex);
|
||||||
|
bool IsV19Active(const CBlockIndex* pindex);
|
||||||
static bool IsInstantSendLLMQTypeShared();
|
static bool IsInstantSendLLMQTypeShared();
|
||||||
|
|
||||||
/// Returns the state of `-llmq-data-recovery`
|
/// Returns the state of `-llmq-data-recovery`
|
||||||
|
@ -51,5 +51,10 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B
|
|||||||
/*.name =*/"dip0024",
|
/*.name =*/"dip0024",
|
||||||
/*.gbt_force =*/true,
|
/*.gbt_force =*/true,
|
||||||
/*.check_mn_protocol =*/false,
|
/*.check_mn_protocol =*/false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
/*.name =*/"v19",
|
||||||
|
/*.gbt_force =*/true,
|
||||||
|
/*.check_mn_protocol =*/false,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -881,15 +881,8 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
|
|
||||||
def activate_dip0024(self, expected_activation_height=None):
|
def activate_by_name(self, name, expected_activation_height=None):
|
||||||
self.log.info("Wait for dip0024 activation")
|
self.log.info("Wait for " + name + " activation")
|
||||||
|
|
||||||
# disable spork17 while mining blocks to activate dip0024 to prevent accidental quorum formation
|
|
||||||
spork17_value = self.nodes[0].spork('show')['SPORK_17_QUORUM_DKG_ENABLED']
|
|
||||||
self.bump_mocktime(1)
|
|
||||||
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 4070908800)
|
|
||||||
self.wait_for_sporks_same()
|
|
||||||
|
|
||||||
# mine blocks in batches
|
# mine blocks in batches
|
||||||
batch_size = 10
|
batch_size = 10
|
||||||
if expected_activation_height is not None:
|
if expected_activation_height is not None:
|
||||||
@ -904,19 +897,31 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
self.bump_mocktime(blocks_left)
|
self.bump_mocktime(blocks_left)
|
||||||
self.nodes[0].generate(blocks_left)
|
self.nodes[0].generate(blocks_left)
|
||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
assert self.nodes[0].getblockchaininfo()['bip9_softforks']['dip0024']['status'] != 'active'
|
assert self.nodes[0].getblockchaininfo()['bip9_softforks'][name]['status'] != 'active'
|
||||||
|
|
||||||
while self.nodes[0].getblockchaininfo()['bip9_softforks']['dip0024']['status'] != 'active':
|
while self.nodes[0].getblockchaininfo()['bip9_softforks'][name]['status'] != 'active':
|
||||||
self.bump_mocktime(batch_size)
|
self.bump_mocktime(batch_size)
|
||||||
self.nodes[0].generate(batch_size)
|
self.nodes[0].generate(batch_size)
|
||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
|
|
||||||
|
def activate_dip0024(self, expected_activation_height=None):
|
||||||
|
# disable spork17 while mining blocks to activate dip0024 to prevent accidental quorum formation
|
||||||
|
spork17_value = self.nodes[0].spork('show')['SPORK_17_QUORUM_DKG_ENABLED']
|
||||||
|
self.bump_mocktime(1)
|
||||||
|
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 4070908800)
|
||||||
|
self.wait_for_sporks_same()
|
||||||
|
|
||||||
|
self.activate_by_name('dip0024', expected_activation_height)
|
||||||
|
|
||||||
# revert spork17 changes
|
# revert spork17 changes
|
||||||
self.bump_mocktime(1)
|
self.bump_mocktime(1)
|
||||||
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", spork17_value)
|
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", spork17_value)
|
||||||
self.wait_for_sporks_same()
|
self.wait_for_sporks_same()
|
||||||
|
|
||||||
|
def activate_v19(self, expected_activation_height=None):
|
||||||
|
self.activate_by_name('v19', expected_activation_height)
|
||||||
|
|
||||||
def set_dash_llmq_test_params(self, llmq_size, llmq_threshold):
|
def set_dash_llmq_test_params(self, llmq_size, llmq_threshold):
|
||||||
self.llmq_size = llmq_size
|
self.llmq_size = llmq_size
|
||||||
self.llmq_threshold = llmq_threshold
|
self.llmq_threshold = llmq_threshold
|
||||||
|
Loading…
Reference in New Issue
Block a user