mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 12:02:48 +01:00
Merge #6269: feat: improvements for v19, v20 and dip3 - fire up test chains by first block 5/n
603061141f
style: apply clang format for new changes (Konstantin Akimov)f01338f607
feat: drop requirement of v20 for Asset Unlock transactions (Konstantin Akimov)b3e9e5c981
feat: drop v20 requirement for special EHF transaction (Konstantin Akimov)8639298e16
refactor: drop fast_dip3_enforcement=True from functional tests. (Konstantin Akimov)0add6bc823
feat: removed 2 checkpoints: TestChainDIP3Setup and TestChainV19Setup from unit tests (Konstantin Akimov)3fffb0cab9
refactor: moves evo-deterministicmns_tests specific code from header (Konstantin Akimov)1d96fbf091
feat: let asset-unlock transactions be available since v20 on all networks (Konstantin Akimov)4b4001bbe7
perf: activate v20 on the same block as v19 for Reg Test (Konstantin Akimov)e0d97cf7ac
feat: let asset locks be mined before v20 (Konstantin Akimov) Pull request description: ## Issue being fixed or feature implemented This PR is 5th in the achieving ultimate goal to activate old forks from block 1. It helps to run unit and functional tests faster; it helps for platform's dev-environment to start faster. ## What was done? - v20 on RegTest is activated from same block as v19 (height 1200 changed to 900) - relaxed condition for special transactions Asset Lock (can be mined any block so far as v20 is activated long time ago). - unify code for regtest, mainnet, testnet for Asset Unlock validation - removed 2 checkpoints: TestChainDIP3Setup and TestChainV19Setup from unit tests which make further changes for forks easier - enforced flag `fast_dip3_enforcement=True` from functional tests which is always true ## How Has This Been Tested? Run unit and functional tests `tsan` job runs 500 seconds faster of real time and 2000seconds faster for "accumulated time" https://gitlab.com/dashpay/dash/-/jobs/7817453421 - this PR https://gitlab.com/dashpay/dash/-/jobs/7805625816 - some old PR for reference No breakdown per tests here, because they affect each other and runs in parallel. ## Breaking Changes Regtest has v20 activated on same block as v19 if otherwise is not specified with `-testactivationheight=v20@1200` ## Checklist: - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation - [x] I have assigned this pull request to a milestone ACKs for top commit: UdjinM6: utACK603061141f
PastaPastaPasta: utACK603061141f
Tree-SHA512: 5a1e15a32931682240ecd8e5bab8a0bba67eebf0409ea7b7556018240c48d59ec8daab8859a2fb883154aac95813553c2835a0527269fcf4e81f1edb1b2ed0ac
This commit is contained in:
commit
9b21aef29e
@ -789,7 +789,7 @@ public:
|
|||||||
consensus.DIP0024Height = 900;
|
consensus.DIP0024Height = 900;
|
||||||
consensus.DIP0024QuorumsHeight = 900;
|
consensus.DIP0024QuorumsHeight = 900;
|
||||||
consensus.V19Height = 900;
|
consensus.V19Height = 900;
|
||||||
consensus.V20Height = 1200;
|
consensus.V20Height = 900;
|
||||||
consensus.MinBIP9WarningHeight = 0;
|
consensus.MinBIP9WarningHeight = 0;
|
||||||
consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 1
|
consensus.powLimit = uint256S("7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 1
|
||||||
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
||||||
|
@ -48,23 +48,10 @@ static bool CheckSpecialTxInner(CDeterministicMNManager& dmnman, const Chainstat
|
|||||||
case TRANSACTION_QUORUM_COMMITMENT:
|
case TRANSACTION_QUORUM_COMMITMENT:
|
||||||
return llmq::CheckLLMQCommitment(dmnman, chainman, tx, pindexPrev, state);
|
return llmq::CheckLLMQCommitment(dmnman, chainman, tx, pindexPrev, state);
|
||||||
case TRANSACTION_MNHF_SIGNAL:
|
case TRANSACTION_MNHF_SIGNAL:
|
||||||
if (!DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_V20)) {
|
|
||||||
return state.Invalid(TxValidationResult::TX_CONSENSUS, "mnhf-before-v20");
|
|
||||||
}
|
|
||||||
return CheckMNHFTx(chainman, qman, tx, pindexPrev, state);
|
return CheckMNHFTx(chainman, qman, tx, pindexPrev, state);
|
||||||
case TRANSACTION_ASSET_LOCK:
|
case TRANSACTION_ASSET_LOCK:
|
||||||
if (!DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_V20)) {
|
|
||||||
return state.Invalid(TxValidationResult::TX_CONSENSUS, "assetlocks-before-v20");
|
|
||||||
}
|
|
||||||
return CheckAssetLockUnlockTx(chainman.m_blockman, qman, tx, pindexPrev, indexes, state);
|
return CheckAssetLockUnlockTx(chainman.m_blockman, qman, tx, pindexPrev, indexes, state);
|
||||||
case TRANSACTION_ASSET_UNLOCK:
|
case TRANSACTION_ASSET_UNLOCK:
|
||||||
if (Params().NetworkIDString() == CBaseChainParams::REGTEST && !DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_V20)) {
|
|
||||||
// TODO: adjust functional tests to make it activated by MN_RR on regtest too
|
|
||||||
return state.Invalid(TxValidationResult::TX_CONSENSUS, "assetunlocks-before-v20");
|
|
||||||
}
|
|
||||||
if (Params().NetworkIDString() != CBaseChainParams::REGTEST && !DeploymentActiveAfter(pindexPrev, consensusParams, Consensus::DEPLOYMENT_MN_RR)) {
|
|
||||||
return state.Invalid(TxValidationResult::TX_CONSENSUS, "assetunlocks-before-mn_rr");
|
|
||||||
}
|
|
||||||
return CheckAssetLockUnlockTx(chainman.m_blockman, qman, tx, pindexPrev, indexes, state);
|
return CheckAssetLockUnlockTx(chainman.m_blockman, qman, tx, pindexPrev, indexes, state);
|
||||||
}
|
}
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
|
@ -36,7 +36,7 @@ struct TestChainBRRBeforeActivationSetup : public TestChainSetup
|
|||||||
{
|
{
|
||||||
// Force fast DIP3 activation
|
// Force fast DIP3 activation
|
||||||
TestChainBRRBeforeActivationSetup() :
|
TestChainBRRBeforeActivationSetup() :
|
||||||
TestChainSetup(497, {"-dip3params=30:50", "-testactivationheight=brr@1000",
|
TestChainSetup(497, {"-dip3params=30:50", "-testactivationheight=brr@1000", "-testactivationheight=v20@1200",
|
||||||
"-vbparams=mn_rr:0:999999999999:0:20:16:12:5:1"})
|
"-vbparams=mn_rr:0:999999999999:0:20:16:12:5:1"})
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -814,6 +814,49 @@ void FuncVerifyDB(TestChainSetup& setup)
|
|||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE(evo_dip3_activation_tests)
|
BOOST_AUTO_TEST_SUITE(evo_dip3_activation_tests)
|
||||||
|
|
||||||
|
struct TestChainDIP3BeforeActivationSetup : public TestChainSetup {
|
||||||
|
TestChainDIP3BeforeActivationSetup() :
|
||||||
|
TestChainSetup(430)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TestChainDIP3Setup : public TestChainDIP3BeforeActivationSetup {
|
||||||
|
TestChainDIP3Setup()
|
||||||
|
{
|
||||||
|
// Activate DIP3 here
|
||||||
|
CreateAndProcessBlock({}, coinbaseKey);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TestChainV19BeforeActivationSetup : public TestChainSetup {
|
||||||
|
TestChainV19BeforeActivationSetup();
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TestChainV19Setup : public TestChainV19BeforeActivationSetup {
|
||||||
|
TestChainV19Setup()
|
||||||
|
{
|
||||||
|
// Activate V19
|
||||||
|
for (int i = 0; i < 5; ++i) {
|
||||||
|
CreateAndProcessBlock({}, coinbaseKey);
|
||||||
|
}
|
||||||
|
bool v19_just_activated{DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(),
|
||||||
|
Consensus::DEPLOYMENT_V19) &&
|
||||||
|
!DeploymentActiveAt(*m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(),
|
||||||
|
Consensus::DEPLOYMENT_V19)};
|
||||||
|
assert(v19_just_activated);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 5 blocks earlier
|
||||||
|
TestChainV19BeforeActivationSetup::TestChainV19BeforeActivationSetup() :
|
||||||
|
TestChainSetup(894)
|
||||||
|
{
|
||||||
|
bool v19_active{DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(),
|
||||||
|
Consensus::DEPLOYMENT_V19)};
|
||||||
|
assert(!v19_active);
|
||||||
|
}
|
||||||
|
|
||||||
// DIP3 can only be activated with legacy scheme (v19 is activated later)
|
// DIP3 can only be activated with legacy scheme (v19 is activated later)
|
||||||
BOOST_AUTO_TEST_CASE(dip3_activation_legacy)
|
BOOST_AUTO_TEST_CASE(dip3_activation_legacy)
|
||||||
{
|
{
|
||||||
|
@ -358,14 +358,10 @@ TestChainSetup::TestChainSetup(int num_blocks, const std::vector<const char*>& e
|
|||||||
{ 100, uint256S("0x6ffb83129c19ebdf1ae3771be6a67fe34b35f4c956326b9ba152fac1649f65ae") },
|
{ 100, uint256S("0x6ffb83129c19ebdf1ae3771be6a67fe34b35f4c956326b9ba152fac1649f65ae") },
|
||||||
/* TestChainDIP3BeforeActivationSetup */
|
/* TestChainDIP3BeforeActivationSetup */
|
||||||
{ 430, uint256S("0x0bcefaa33fec56cd84d05d0e76cd6a78badcc20f627d91903646de6a07930a14") },
|
{ 430, uint256S("0x0bcefaa33fec56cd84d05d0e76cd6a78badcc20f627d91903646de6a07930a14") },
|
||||||
/* TestChainDIP3Setup */
|
|
||||||
{ 431, uint256S("0x5fd3aa5ef29464839499d7f847edd9362e3e73392b79d3bd88b1591f5fb17d4e") },
|
|
||||||
/* TestChainBRRBeforeActivationSetup */
|
/* TestChainBRRBeforeActivationSetup */
|
||||||
{ 497, uint256S("0x23c31820ec5160b7181bfdf328e2b76cd12c9fa4544d892b7f01e74dd6220849") },
|
{ 497, uint256S("0x23c31820ec5160b7181bfdf328e2b76cd12c9fa4544d892b7f01e74dd6220849") },
|
||||||
/* TestChainV19BeforeActivationSetup */
|
/* TestChainV19BeforeActivationSetup */
|
||||||
{ 894, uint256S("0x2885cf0fe8fdf29803b6c65002ba2570ff011531d8ea92be312a85d655e00c51") },
|
{ 894, uint256S("0x2885cf0fe8fdf29803b6c65002ba2570ff011531d8ea92be312a85d655e00c51") },
|
||||||
/* TestChainV19Setup */
|
|
||||||
{ 899, uint256S("0x7df3c857ce647b3ecd0d4b389b6b0f16e2bdc60b20a8d01c4ad946fe5f15dbc2") },
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -571,16 +567,3 @@ CBlock getBlock13b8a()
|
|||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestChainV19Setup::TestChainV19Setup() : TestChainSetup(899)
|
|
||||||
{
|
|
||||||
bool v19_just_activated{DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(), Consensus::DEPLOYMENT_V19) &&
|
|
||||||
!DeploymentActiveAt(*m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
|
|
||||||
assert(v19_just_activated);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 5 blocks earlier
|
|
||||||
TestChainV19BeforeActivationSetup::TestChainV19BeforeActivationSetup() : TestChainSetup(894)
|
|
||||||
{
|
|
||||||
bool v19_active{DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), Params().GetConsensus(), Consensus::DEPLOYMENT_V19)};
|
|
||||||
assert(!v19_active);
|
|
||||||
}
|
|
||||||
|
@ -183,26 +183,6 @@ struct TestChain100Setup : public TestChainSetup {
|
|||||||
TestChain100Setup(const std::vector<const char*>& extra_args = {});
|
TestChain100Setup(const std::vector<const char*>& extra_args = {});
|
||||||
};
|
};
|
||||||
|
|
||||||
struct TestChainDIP3Setup : public TestChainSetup
|
|
||||||
{
|
|
||||||
TestChainDIP3Setup() : TestChainSetup(431) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TestChainV19Setup : public TestChainSetup
|
|
||||||
{
|
|
||||||
TestChainV19Setup();
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TestChainDIP3BeforeActivationSetup : public TestChainSetup
|
|
||||||
{
|
|
||||||
TestChainDIP3BeforeActivationSetup() : TestChainSetup(430) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TestChainV19BeforeActivationSetup : public TestChainSetup
|
|
||||||
{
|
|
||||||
TestChainV19BeforeActivationSetup();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Make a test setup that has disk access to the debug.log file disabled. Can
|
* Make a test setup that has disk access to the debug.log file disabled. Can
|
||||||
* be used in "hot loops", for example fuzzing or benchmarking.
|
* be used in "hot loops", for example fuzzing or benchmarking.
|
||||||
|
@ -242,8 +242,8 @@ class AssetLocksTest(DashTestFramework):
|
|||||||
|
|
||||||
self.set_sporks()
|
self.set_sporks()
|
||||||
|
|
||||||
self.activate_v19(expected_activation_height=900)
|
self.activate_v20(expected_activation_height=900)
|
||||||
self.log.info("Activated v19 at height:" + str(node.getblockcount()))
|
self.log.info("Activated v20 at height:" + str(node.getblockcount()))
|
||||||
|
|
||||||
self.nodes[0].sporkupdate("SPORK_2_INSTANTSEND_ENABLED", 0)
|
self.nodes[0].sporkupdate("SPORK_2_INSTANTSEND_ENABLED", 0)
|
||||||
self.wait_for_sporks_same()
|
self.wait_for_sporks_same()
|
||||||
@ -256,7 +256,6 @@ class AssetLocksTest(DashTestFramework):
|
|||||||
self.sync_blocks()
|
self.sync_blocks()
|
||||||
|
|
||||||
self.set_sporks()
|
self.set_sporks()
|
||||||
self.activate_v20()
|
|
||||||
node.generate(1)
|
node.generate(1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
self.mempool_size = 0
|
self.mempool_size = 0
|
||||||
@ -640,7 +639,7 @@ class AssetLocksTest(DashTestFramework):
|
|||||||
all_mn_rewards = platform_reward + owner_reward + operator_reward
|
all_mn_rewards = platform_reward + owner_reward + operator_reward
|
||||||
assert_equal(all_mn_rewards, bt['coinbasevalue'] * 3 // 4) # 75/25 mn/miner reward split
|
assert_equal(all_mn_rewards, bt['coinbasevalue'] * 3 // 4) # 75/25 mn/miner reward split
|
||||||
assert_equal(platform_reward, all_mn_rewards * 375 // 1000) # 0.375 platform share
|
assert_equal(platform_reward, all_mn_rewards * 375 // 1000) # 0.375 platform share
|
||||||
assert_equal(platform_reward, 31916328)
|
assert_equal(platform_reward, 37015386)
|
||||||
assert_equal(locked, self.get_credit_pool_balance())
|
assert_equal(locked, self.get_credit_pool_balance())
|
||||||
node.generate(1)
|
node.generate(1)
|
||||||
self.sync_all()
|
self.sync_all()
|
||||||
|
@ -85,12 +85,12 @@ class FullBlockTest(BitcoinTestFramework):
|
|||||||
# Very large reorgs cause cs_main to be held for a very long time in ActivateBestChainStep,
|
# Very large reorgs cause cs_main to be held for a very long time in ActivateBestChainStep,
|
||||||
# which causes RPC to hang, so we need to increase RPC timeouts
|
# which causes RPC to hang, so we need to increase RPC timeouts
|
||||||
self.rpc_timeout = 180
|
self.rpc_timeout = 180
|
||||||
# Must set '-dip3params=2000:2000' to create pre-dip3 blocks only
|
|
||||||
self.extra_args = [[
|
self.extra_args = [[
|
||||||
'-dip3params=2000:2000',
|
'-dip3params=2000:2000', # Must set '-dip3params=2000:2000' to create pre-dip3 blocks only
|
||||||
'-acceptnonstdtxn=1', # This is a consensus block test, we don't care about tx policy
|
'-acceptnonstdtxn=1', # This is a consensus block test, we don't care about tx policy
|
||||||
'-testactivationheight=bip34@2',
|
'-testactivationheight=bip34@2',
|
||||||
'-testactivationheight=dip0001@2000',
|
'-testactivationheight=dip0001@2000',
|
||||||
|
'-testactivationheight=v20@2000',
|
||||||
]]
|
]]
|
||||||
|
|
||||||
def setup_nodes(self):
|
def setup_nodes(self):
|
||||||
|
@ -43,7 +43,7 @@ class FeatureBlockfilterindexPruneTest(BitcoinTestFramework):
|
|||||||
assert_greater_than(len(self.nodes[0].getblockfilter(self.nodes[0].getblockhash(2))['filter']), 0)
|
assert_greater_than(len(self.nodes[0].getblockfilter(self.nodes[0].getblockhash(2))['filter']), 0)
|
||||||
|
|
||||||
self.log.info("start node without blockfilterindex")
|
self.log.info("start node without blockfilterindex")
|
||||||
self.restart_node(0, extra_args=["-fastprune", "-prune=1"], expected_stderr=EXPECTED_STDERR_NO_GOV_PRUNE)
|
self.restart_node(0, extra_args=["-fastprune", "-prune=1", '-testactivationheight=v20@2000'], expected_stderr=EXPECTED_STDERR_NO_GOV_PRUNE)
|
||||||
|
|
||||||
self.log.info("make sure accessing the blockfilters throws an error")
|
self.log.info("make sure accessing the blockfilters throws an error")
|
||||||
assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic", self.nodes[0].getblockfilter, self.nodes[0].getblockhash(2))
|
assert_raises_rpc_error(-1, "Index is not enabled for filtertype basic", self.nodes[0].getblockfilter, self.nodes[0].getblockhash(2))
|
||||||
|
@ -43,7 +43,10 @@ class TestP2PConn(P2PInterface):
|
|||||||
|
|
||||||
class DIP3V19Test(DashTestFramework):
|
class DIP3V19Test(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(6, 5, fast_dip3_enforcement=True, evo_count=2)
|
self.extra_args = [[
|
||||||
|
'-testactivationheight=v20@1200', # required otherwise mine_quorum("llmq_test [100]") fails
|
||||||
|
]] * 6
|
||||||
|
self.set_dash_test_params(6, 5, evo_count=2, extra_args=self.extra_args)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
# Connect all nodes to node1 so that we always have the whole network connected
|
# Connect all nodes to node1 so that we always have the whole network connected
|
||||||
|
@ -44,7 +44,7 @@ class TestP2PConn(P2PInterface):
|
|||||||
class LLMQCoinbaseCommitmentsTest(DashTestFramework):
|
class LLMQCoinbaseCommitmentsTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.extra_args = [[ f'-testactivationheight=dip0008@{DIP0008_HEIGHT}', "-vbparams=testdummy:999999999999:999999999999" ]] * 4
|
self.extra_args = [[ f'-testactivationheight=dip0008@{DIP0008_HEIGHT}', "-vbparams=testdummy:999999999999:999999999999" ]] * 4
|
||||||
self.set_dash_test_params(4, 3, extra_args = self.extra_args, fast_dip3_enforcement=True)
|
self.set_dash_test_params(4, 3, extra_args = self.extra_args)
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
# No IS or Chainlocks in this test
|
# No IS or Chainlocks in this test
|
||||||
self.bump_mocktime(1)
|
self.bump_mocktime(1)
|
||||||
|
@ -18,7 +18,7 @@ class DashGovernanceTest (DashTestFramework):
|
|||||||
self.set_dash_test_params(6, 5, [[
|
self.set_dash_test_params(6, 5, [[
|
||||||
"-budgetparams=10:10:10",
|
"-budgetparams=10:10:10",
|
||||||
'-testactivationheight=v20@160',
|
'-testactivationheight=v20@160',
|
||||||
]] * 6, fast_dip3_enforcement=True)
|
]] * 6)
|
||||||
|
|
||||||
def check_superblockbudget(self, v20_active):
|
def check_superblockbudget(self, v20_active):
|
||||||
v20_state = self.nodes[0].getblockchaininfo()["softforks"]["v20"]
|
v20_state = self.nodes[0].getblockchaininfo()["softforks"]["v20"]
|
||||||
|
@ -14,7 +14,7 @@ from test_framework.util import assert_equal, satoshi_round
|
|||||||
|
|
||||||
class DashGovernanceTest (DashTestFramework):
|
class DashGovernanceTest (DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(6, 5, [["-budgetparams=10:10:10"]] * 6, fast_dip3_enforcement=True)
|
self.set_dash_test_params(6, 5, [["-budgetparams=10:10:10"]] * 6)
|
||||||
|
|
||||||
def prepare_object(self, object_type, parent_hash, creation_time, revision, name, amount, payment_address):
|
def prepare_object(self, object_type, parent_hash, creation_time, revision, name, amount, payment_address):
|
||||||
proposal_rev = revision
|
proposal_rev = revision
|
||||||
|
@ -20,7 +20,7 @@ from test_framework.util import assert_equal, assert_raises_rpc_error, force_fin
|
|||||||
|
|
||||||
class LLMQChainLocksTest(DashTestFramework):
|
class LLMQChainLocksTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(5, 4, fast_dip3_enforcement=True)
|
self.set_dash_test_params(5, 4)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
|
||||||
@ -33,7 +33,7 @@ class LLMQChainLocksTest(DashTestFramework):
|
|||||||
|
|
||||||
self.test_coinbase_best_cl(self.nodes[0], expected_cl_in_cb=False)
|
self.test_coinbase_best_cl(self.nodes[0], expected_cl_in_cb=False)
|
||||||
|
|
||||||
self.activate_v20(expected_activation_height=1200)
|
self.activate_v20(expected_activation_height=900)
|
||||||
self.log.info("Activated v20 at height:" + str(self.nodes[0].getblockcount()))
|
self.log.info("Activated v20 at height:" + str(self.nodes[0].getblockcount()))
|
||||||
|
|
||||||
# v20 is active for the next block, not for the tip
|
# v20 is active for the next block, not for the tip
|
||||||
|
@ -17,7 +17,7 @@ from test_framework.util import assert_greater_than_or_equal
|
|||||||
|
|
||||||
class LLMQConnections(DashTestFramework):
|
class LLMQConnections(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(15, 14, fast_dip3_enforcement=True)
|
self.set_dash_test_params(15, 14)
|
||||||
self.set_dash_llmq_test_params(5, 3)
|
self.set_dash_llmq_test_params(5, 3)
|
||||||
# Probes should age after this many seconds.
|
# Probes should age after this many seconds.
|
||||||
# NOTE: mine_quorum() can bump mocktime quite often internally so make sure this number is high enough.
|
# NOTE: mine_quorum() can bump mocktime quite often internally so make sure this number is high enough.
|
||||||
|
@ -25,7 +25,7 @@ llmq_type_strings = {llmq_test: 'llmq_test', llmq_test_v17: 'llmq_test_v17'}
|
|||||||
class QuorumDataRecoveryTest(DashTestFramework):
|
class QuorumDataRecoveryTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
extra_args = [["-vbparams=testdummy:0:999999999999:0:10:8:6:5:-1"] for _ in range(9)]
|
extra_args = [["-vbparams=testdummy:0:999999999999:0:10:8:6:5:-1"] for _ in range(9)]
|
||||||
self.set_dash_test_params(9, 7, fast_dip3_enforcement=True, extra_args=extra_args)
|
self.set_dash_test_params(9, 7, extra_args=extra_args)
|
||||||
self.set_dash_llmq_test_params(4, 3)
|
self.set_dash_llmq_test_params(4, 3)
|
||||||
|
|
||||||
def restart_mn(self, mn, reindex=False, qvvec_sync=None, qdata_recovery_enabled=True):
|
def restart_mn(self, mn, reindex=False, qvvec_sync=None, qdata_recovery_enabled=True):
|
||||||
|
@ -14,7 +14,7 @@ Simulate and check DKG errors
|
|||||||
|
|
||||||
class LLMQDKGErrors(DashTestFramework):
|
class LLMQDKGErrors(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(4, 3, [["-whitelist=127.0.0.1"]] * 4, fast_dip3_enforcement=True)
|
self.set_dash_test_params(4, 3, [["-whitelist=127.0.0.1"]] * 4)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
||||||
|
@ -46,7 +46,7 @@ class TestP2PConn(P2PInterface):
|
|||||||
|
|
||||||
class LLMQEvoNodesTest(DashTestFramework):
|
class LLMQEvoNodesTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(5, 4, fast_dip3_enforcement=True, evo_count=5)
|
self.set_dash_test_params(5, 4, evo_count=5)
|
||||||
self.set_dash_llmq_test_params(4, 4)
|
self.set_dash_llmq_test_params(4, 4)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
@ -49,7 +49,7 @@ class TestP2PConn(P2PInterface):
|
|||||||
|
|
||||||
class LLMQ_IS_CL_Conflicts(DashTestFramework):
|
class LLMQ_IS_CL_Conflicts(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(5, 4, fast_dip3_enforcement=True)
|
self.set_dash_test_params(5, 4)
|
||||||
self.set_dash_llmq_test_params(4, 4)
|
self.set_dash_llmq_test_params(4, 4)
|
||||||
self.supports_cli = False
|
self.supports_cli = False
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ from test_framework.util import set_node_times
|
|||||||
class LLMQ_IS_RetroactiveSigning(DashTestFramework):
|
class LLMQ_IS_RetroactiveSigning(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
# -whitelist is needed to avoid the trickling logic on node0
|
# -whitelist is needed to avoid the trickling logic on node0
|
||||||
self.set_dash_test_params(5, 4, [["-whitelist=127.0.0.1"], [], [], [], ["-minrelaytxfee=0.001"]], fast_dip3_enforcement=True)
|
self.set_dash_test_params(5, 4, [["-whitelist=127.0.0.1"], [], [], [], ["-minrelaytxfee=0.001"]])
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
||||||
|
@ -51,7 +51,7 @@ class TestP2PConn(P2PInterface):
|
|||||||
|
|
||||||
class LLMQQuorumRotationTest(DashTestFramework):
|
class LLMQQuorumRotationTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(9, 8, fast_dip3_enforcement=True)
|
self.set_dash_test_params(9, 8)
|
||||||
self.set_dash_llmq_test_params(4, 4)
|
self.set_dash_llmq_test_params(4, 4)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
@ -113,9 +113,9 @@ class LLMQQuorumRotationTest(DashTestFramework):
|
|||||||
expectedNew = [h_100_0, h_106_0, h_104_0, h_100_1, h_106_1, h_104_1]
|
expectedNew = [h_100_0, h_106_0, h_104_0, h_100_1, h_106_1, h_104_1]
|
||||||
quorumList = self.test_getmnlistdiff_quorums(b_h_0, b_h_1, {}, expectedDeleted, expectedNew, testQuorumsCLSigs=False)
|
quorumList = self.test_getmnlistdiff_quorums(b_h_0, b_h_1, {}, expectedDeleted, expectedNew, testQuorumsCLSigs=False)
|
||||||
|
|
||||||
projected_activation_height = 1200
|
projected_activation_height = 900
|
||||||
|
|
||||||
self.activate_v20(expected_activation_height=1200)
|
self.activate_v20(expected_activation_height=900)
|
||||||
self.log.info("Activated v20 at height:" + str(self.nodes[0].getblockcount()))
|
self.log.info("Activated v20 at height:" + str(self.nodes[0].getblockcount()))
|
||||||
|
|
||||||
softfork_info = self.nodes[0].getblockchaininfo()['softforks']['v20']
|
softfork_info = self.nodes[0].getblockchaininfo()['softforks']['v20']
|
||||||
|
@ -18,7 +18,7 @@ from test_framework.util import assert_equal, assert_raises_rpc_error, force_fin
|
|||||||
|
|
||||||
class LLMQSigningTest(DashTestFramework):
|
class LLMQSigningTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(6, 5, fast_dip3_enforcement=True)
|
self.set_dash_test_params(6, 5)
|
||||||
self.set_dash_llmq_test_params(5, 3)
|
self.set_dash_llmq_test_params(5, 3)
|
||||||
|
|
||||||
def add_options(self, parser):
|
def add_options(self, parser):
|
||||||
|
@ -18,7 +18,7 @@ from test_framework.util import assert_equal, force_finish_mnsync, p2p_port
|
|||||||
|
|
||||||
class LLMQSimplePoSeTest(DashTestFramework):
|
class LLMQSimplePoSeTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(6, 5, fast_dip3_enforcement=True)
|
self.set_dash_test_params(6, 5)
|
||||||
self.set_dash_llmq_test_params(5, 3)
|
self.set_dash_llmq_test_params(5, 3)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
@ -25,7 +25,7 @@ from test_framework.util import (
|
|||||||
class MnehfTest(DashTestFramework):
|
class MnehfTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
extra_args = [["-vbparams=testdummy:0:999999999999:0:12:12:12:5:1", "-persistmempool=0"] for _ in range(4)]
|
extra_args = [["-vbparams=testdummy:0:999999999999:0:12:12:12:5:1", "-persistmempool=0"] for _ in range(4)]
|
||||||
self.set_dash_test_params(4, 3, fast_dip3_enforcement=True, extra_args=extra_args)
|
self.set_dash_test_params(4, 3, extra_args=extra_args)
|
||||||
|
|
||||||
def skip_test_if_missing_module(self):
|
def skip_test_if_missing_module(self):
|
||||||
self.skip_if_no_wallet()
|
self.skip_if_no_wallet()
|
||||||
|
@ -27,7 +27,7 @@ def notify_outputname(walletname, txid):
|
|||||||
|
|
||||||
class NotificationsTest(DashTestFramework):
|
class NotificationsTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(6, 4, fast_dip3_enforcement=True)
|
self.set_dash_test_params(6, 4)
|
||||||
|
|
||||||
def setup_network(self):
|
def setup_network(self):
|
||||||
self.wallet = ''.join(chr(i) for i in range(FILE_CHAR_START, FILE_CHAR_END) if chr(i) not in FILE_CHARS_DISALLOWED)
|
self.wallet = ''.join(chr(i) for i in range(FILE_CHAR_START, FILE_CHAR_END) if chr(i) not in FILE_CHARS_DISALLOWED)
|
||||||
|
@ -108,7 +108,7 @@ class DashZMQTest (DashTestFramework):
|
|||||||
|
|
||||||
extra_args = [[]] * 5
|
extra_args = [[]] * 5
|
||||||
extra_args[0] = node0_extra_args
|
extra_args[0] = node0_extra_args
|
||||||
self.set_dash_test_params(5, 4, fast_dip3_enforcement=True, extra_args=extra_args)
|
self.set_dash_test_params(5, 4, extra_args=extra_args)
|
||||||
self.set_dash_llmq_test_params(4, 4)
|
self.set_dash_llmq_test_params(4, 4)
|
||||||
|
|
||||||
def skip_test_if_missing_module(self):
|
def skip_test_if_missing_module(self):
|
||||||
|
@ -48,7 +48,7 @@ class P2PStaller(P2PDataStore):
|
|||||||
class P2PIBDStallingTest(BitcoinTestFramework):
|
class P2PIBDStallingTest(BitcoinTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.disable_mocktime = True
|
self.disable_mocktime = True
|
||||||
self.extra_args = [["-dip3params=2000:2000"]]
|
self.extra_args = [["-dip3params=2000:2000", "-testactivationheight=v20@2000"]]
|
||||||
self.setup_clean_chain = True
|
self.setup_clean_chain = True
|
||||||
self.num_nodes = 1
|
self.num_nodes = 1
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ Tests InstantSend functionality (prevent doublespend for unconfirmed transaction
|
|||||||
|
|
||||||
class InstantSendTest(DashTestFramework):
|
class InstantSendTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(8, 4, fast_dip3_enforcement=True)
|
self.set_dash_test_params(8, 4)
|
||||||
# set sender, receiver, isolated nodes
|
# set sender, receiver, isolated nodes
|
||||||
self.isolated_idx = 1
|
self.isolated_idx = 1
|
||||||
self.receiver_idx = 2
|
self.receiver_idx = 2
|
||||||
|
@ -118,7 +118,7 @@ class QuorumDataInterface(P2PInterface):
|
|||||||
class QuorumDataMessagesTest(DashTestFramework):
|
class QuorumDataMessagesTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
extra_args = [["-llmq-data-recovery=0", "-deprecatedrpc=banscore"]] * 4
|
extra_args = [["-llmq-data-recovery=0", "-deprecatedrpc=banscore"]] * 4
|
||||||
self.set_dash_test_params(4, 3, fast_dip3_enforcement=True, extra_args=extra_args)
|
self.set_dash_test_params(4, 3, extra_args=extra_args)
|
||||||
|
|
||||||
def restart_mn(self, mn, reindex=False):
|
def restart_mn(self, mn, reindex=False):
|
||||||
args = self.extra_args[mn.node.index] + ['-masternodeblsprivkey=%s' % mn.keyOperator]
|
args = self.extra_args[mn.node.index] + ['-masternodeblsprivkey=%s' % mn.keyOperator]
|
||||||
|
@ -155,7 +155,7 @@ class BlockchainTest(BitcoinTestFramework):
|
|||||||
'dip0024': { 'type': 'buried', 'active': False, 'height': 900},
|
'dip0024': { 'type': 'buried', 'active': False, 'height': 900},
|
||||||
'realloc': { 'type': 'buried', 'active': True, 'height': 1},
|
'realloc': { 'type': 'buried', 'active': True, 'height': 1},
|
||||||
'v19': { 'type': 'buried', 'active': False, 'height': 900},
|
'v19': { 'type': 'buried', 'active': False, 'height': 900},
|
||||||
'v20': { 'type': 'buried', 'active': False, 'height': 1200},
|
'v20': { 'type': 'buried', 'active': False, 'height': 900},
|
||||||
'mn_rr': {
|
'mn_rr': {
|
||||||
'type': 'bip9',
|
'type': 'bip9',
|
||||||
'bip9': {
|
'bip9': {
|
||||||
|
@ -13,7 +13,7 @@ Test "masternode" rpc subcommands
|
|||||||
|
|
||||||
class RPCMasternodeTest(DashTestFramework):
|
class RPCMasternodeTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(4, 3, fast_dip3_enforcement=True)
|
self.set_dash_test_params(4, 3)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.log.info("test that results from `winners` and `payments` RPCs match")
|
self.log.info("test that results from `winners` and `payments` RPCs match")
|
||||||
|
@ -17,7 +17,7 @@ Tests mnauth RPC command
|
|||||||
|
|
||||||
class FakeMNAUTHTest(DashTestFramework):
|
class FakeMNAUTHTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(2, 1, fast_dip3_enforcement=True)
|
self.set_dash_test_params(2, 1)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ def assert_net_servicesnames(servicesflag, servicenames):
|
|||||||
|
|
||||||
class NetTest(DashTestFramework):
|
class NetTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(3, 1, fast_dip3_enforcement=True)
|
self.set_dash_test_params(3, 1)
|
||||||
self.supports_cli = False
|
self.supports_cli = False
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
@ -13,7 +13,7 @@ Test "quorum" rpc subcommands
|
|||||||
|
|
||||||
class RPCMasternodeTest(DashTestFramework):
|
class RPCMasternodeTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(4, 3, fast_dip3_enforcement=True)
|
self.set_dash_test_params(4, 3)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
self.nodes[0].sporkupdate("SPORK_17_QUORUM_DKG_ENABLED", 0)
|
||||||
|
@ -19,7 +19,7 @@ Test the following RPC:
|
|||||||
class RPCVerifyChainLockTest(DashTestFramework):
|
class RPCVerifyChainLockTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
# -whitelist is needed to avoid the trickling logic on node0
|
# -whitelist is needed to avoid the trickling logic on node0
|
||||||
self.set_dash_test_params(5, 3, [["-whitelist=127.0.0.1"], [], [], [], []], fast_dip3_enforcement=True)
|
self.set_dash_test_params(5, 3, [["-whitelist=127.0.0.1"], [], [], [], []])
|
||||||
self.set_dash_llmq_test_params(3, 2)
|
self.set_dash_llmq_test_params(3, 2)
|
||||||
|
|
||||||
def cl_helper(self, height, chainlock, mempool):
|
def cl_helper(self, height, chainlock, mempool):
|
||||||
|
@ -17,7 +17,7 @@ Test verifyislock rpc
|
|||||||
class RPCVerifyISLockTest(DashTestFramework):
|
class RPCVerifyISLockTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
# -whitelist is needed to avoid the trickling logic on node0
|
# -whitelist is needed to avoid the trickling logic on node0
|
||||||
self.set_dash_test_params(6, 5, [["-whitelist=127.0.0.1"], [], [], [], [], []], fast_dip3_enforcement=True)
|
self.set_dash_test_params(6, 5, [["-whitelist=127.0.0.1"], [], [], [], [], []])
|
||||||
|
|
||||||
def get_request_id(self, tx_hex):
|
def get_request_id(self, tx_hex):
|
||||||
tx = from_hex(CTransaction(), tx_hex)
|
tx = from_hex(CTransaction(), tx_hex)
|
||||||
|
@ -1108,7 +1108,7 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
if mn2.node is not None:
|
if mn2.node is not None:
|
||||||
mn2.node.setmnthreadactive(True)
|
mn2.node.setmnthreadactive(True)
|
||||||
|
|
||||||
def set_dash_test_params(self, num_nodes, masterodes_count, extra_args=None, fast_dip3_enforcement=False, evo_count=0):
|
def set_dash_test_params(self, num_nodes, masterodes_count, extra_args=None, evo_count=0):
|
||||||
self.mn_count = masterodes_count
|
self.mn_count = masterodes_count
|
||||||
self.evo_count = evo_count
|
self.evo_count = evo_count
|
||||||
self.num_nodes = num_nodes
|
self.num_nodes = num_nodes
|
||||||
@ -1120,10 +1120,8 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
assert_equal(len(extra_args), num_nodes)
|
assert_equal(len(extra_args), num_nodes)
|
||||||
self.extra_args = [copy.deepcopy(a) for a in extra_args]
|
self.extra_args = [copy.deepcopy(a) for a in extra_args]
|
||||||
self.extra_args[0] += ["-sporkkey=cP4EKFyJsHT39LDqgdcB43Y3YXjNyjb5Fuas1GQSeAtjnZWmZEQK"]
|
self.extra_args[0] += ["-sporkkey=cP4EKFyJsHT39LDqgdcB43Y3YXjNyjb5Fuas1GQSeAtjnZWmZEQK"]
|
||||||
self.fast_dip3_enforcement = fast_dip3_enforcement
|
|
||||||
if fast_dip3_enforcement:
|
|
||||||
for i in range(0, num_nodes):
|
for i in range(0, num_nodes):
|
||||||
self.extra_args[i].append("-dip3params=30:50")
|
self.extra_args[i].append("-dip3params=2:2")
|
||||||
|
|
||||||
# LLMQ default test params (no need to pass -llmqtestparams)
|
# LLMQ default test params (no need to pass -llmqtestparams)
|
||||||
self.llmq_size = 3
|
self.llmq_size = 3
|
||||||
@ -1482,12 +1480,6 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
self.bump_mocktime(1)
|
self.bump_mocktime(1)
|
||||||
self.nodes[0].generate(10)
|
self.nodes[0].generate(10)
|
||||||
|
|
||||||
self.log.info("Activating DIP3")
|
|
||||||
if not self.fast_dip3_enforcement:
|
|
||||||
while self.nodes[0].getblockcount() < 500:
|
|
||||||
self.nodes[0].generate(10)
|
|
||||||
self.sync_all()
|
|
||||||
|
|
||||||
# create masternodes
|
# create masternodes
|
||||||
self.prepare_masternodes()
|
self.prepare_masternodes()
|
||||||
self.prepare_datadirs()
|
self.prepare_datadirs()
|
||||||
|
Loading…
Reference in New Issue
Block a user