mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
feat: bury fork mn_rr (masternode reward reallocation)
This commit is contained in:
parent
750475ffaa
commit
0de3923b06
@ -193,7 +193,8 @@ public:
|
|||||||
consensus.DIP0024QuorumsHeight = 1738698; // 000000000000001aa25181e4c466e593992c98f9eb21c69ee757b8bb0af50244
|
consensus.DIP0024QuorumsHeight = 1738698; // 000000000000001aa25181e4c466e593992c98f9eb21c69ee757b8bb0af50244
|
||||||
consensus.V19Height = 1899072; // 0000000000000015e32e73052d663626327004c81c5c22cb8b42c361015c0eae
|
consensus.V19Height = 1899072; // 0000000000000015e32e73052d663626327004c81c5c22cb8b42c361015c0eae
|
||||||
consensus.V20Height = 1987776; // 000000000000001bf41cff06b76780050682ca29e61a91c391893d4745579777
|
consensus.V20Height = 1987776; // 000000000000001bf41cff06b76780050682ca29e61a91c391893d4745579777
|
||||||
consensus.MinBIP9WarningHeight = 1987776 + 2016; // V20 activation height + miner confirmation window
|
consensus.MN_RRHeight = 2128896; // 0000000000000009a9696da93d3807eb14eb00a4ff449206d689156a21b27f26
|
||||||
|
consensus.MinBIP9WarningHeight = 2128896 + 2016; // mn_rr activation height + miner confirmation window
|
||||||
consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20
|
consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20
|
||||||
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
||||||
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
||||||
@ -208,16 +209,6 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
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_TESTDUMMY].min_activation_height = 0; // No activation delay
|
||||||
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].bit = 10;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nStartTime = 1704067200; // January 1, 2024
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nTimeout = 1767225600; // January 1, 2026
|
|
||||||
// NOTE: nWindowSize for MN_RR __MUST__ be greater than or equal to nSuperblockMaturityWindow for CSuperblock::GetPaymentsLimit() to work correctly
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nWindowSize = 4032;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdStart = 3226; // 80% of 4032
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdMin = 2420; // 60% of 4032
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nFalloffCoeff = 5; // this corresponds to 10 periods
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].useEHF = true;
|
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000988117deadb0db9cd5b8"); // 2109672
|
consensus.nMinimumChainWork = uint256S("0x00000000000000000000000000000000000000000000988117deadb0db9cd5b8"); // 2109672
|
||||||
|
|
||||||
@ -388,7 +379,8 @@ public:
|
|||||||
consensus.DIP0024QuorumsHeight = 770730; // 0000003c43b3ae7fffe61278ca5537a0e256ebf4d709d45f0ab040271074d51e
|
consensus.DIP0024QuorumsHeight = 770730; // 0000003c43b3ae7fffe61278ca5537a0e256ebf4d709d45f0ab040271074d51e
|
||||||
consensus.V19Height = 850100; // 000004728b8ff2a16b9d4eebb0fd61eeffadc9c7fe4b0ec0b5a739869401ab5b
|
consensus.V19Height = 850100; // 000004728b8ff2a16b9d4eebb0fd61eeffadc9c7fe4b0ec0b5a739869401ab5b
|
||||||
consensus.V20Height = 905100; // 0000020c5e0f86f385cbf8e90210de9a9fd63633f01433bf47a6b3227a2851fd
|
consensus.V20Height = 905100; // 0000020c5e0f86f385cbf8e90210de9a9fd63633f01433bf47a6b3227a2851fd
|
||||||
consensus.MinBIP9WarningHeight = 905100 + 2016; // v19 activation height + miner confirmation window
|
consensus.MN_RRHeight = 1066900; // 000000d05d445958a9a4ad6bdc0f4bfb25af124b2326060703373ff2d3b397e9
|
||||||
|
consensus.MinBIP9WarningHeight = 1066900 + 2016; // mn_rr activation height + miner confirmation window
|
||||||
consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20
|
consensus.powLimit = uint256S("00000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"); // ~uint256(0) >> 20
|
||||||
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
consensus.nPowTargetTimespan = 24 * 60 * 60; // Dash: 1 day
|
||||||
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
||||||
@ -403,15 +395,6 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
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_TESTDUMMY].min_activation_height = 0; // No activation delay
|
||||||
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].bit = 10;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nStartTime = 1693526400; // Friday, September 1, 2023 0:00:00
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nWindowSize = 100;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdStart = 80; // 80% of 100
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdMin = 60; // 60% of 100
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nFalloffCoeff = 5; // this corresponds to 10 periods
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].useEHF = true;
|
|
||||||
|
|
||||||
// The best chain should have at least this much work.
|
// The best chain should have at least this much work.
|
||||||
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000031779704a0f54b4"); // 1069875
|
consensus.nMinimumChainWork = uint256S("0x000000000000000000000000000000000000000000000000031779704a0f54b4"); // 1069875
|
||||||
|
|
||||||
@ -557,7 +540,8 @@ public:
|
|||||||
consensus.DIP0024QuorumsHeight = 300;
|
consensus.DIP0024QuorumsHeight = 300;
|
||||||
consensus.V19Height = 300;
|
consensus.V19Height = 300;
|
||||||
consensus.V20Height = 300;
|
consensus.V20Height = 300;
|
||||||
consensus.MinBIP9WarningHeight = 300 + 2016; // v20 activation height + miner confirmation window
|
consensus.MN_RRHeight = 300;
|
||||||
|
consensus.MinBIP9WarningHeight = 300 + 2016; // mn_rr activation height + miner confirmation window
|
||||||
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
|
||||||
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
consensus.nPowTargetSpacing = 2.5 * 60; // Dash: 2.5 minutes
|
||||||
@ -572,15 +556,6 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
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_TESTDUMMY].min_activation_height = 0; // No activation delay
|
||||||
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].bit = 10;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nStartTime = 1661990400; // Sep 1st, 2022
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nWindowSize = 120;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdStart = 80; // 80% of 100
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdMin = 60; // 60% of 100
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nFalloffCoeff = 5; // this corresponds to 10 periods
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].useEHF = true;
|
|
||||||
|
|
||||||
// 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");
|
||||||
|
|
||||||
@ -790,6 +765,7 @@ public:
|
|||||||
consensus.DIP0024QuorumsHeight = 900;
|
consensus.DIP0024QuorumsHeight = 900;
|
||||||
consensus.V19Height = 900;
|
consensus.V19Height = 900;
|
||||||
consensus.V20Height = 900;
|
consensus.V20Height = 900;
|
||||||
|
consensus.MN_RRHeight = 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
|
||||||
@ -806,15 +782,6 @@ public:
|
|||||||
consensus.vDeployments[Consensus::DEPLOYMENT_TESTDUMMY].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
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_TESTDUMMY].min_activation_height = 0; // No activation delay
|
||||||
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].bit = 10;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nStartTime = 0;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nTimeout = Consensus::BIP9Deployment::NO_TIMEOUT;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nWindowSize = 12;
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdStart = 9; // 80% of 12
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nThresholdMin = 7; // 60% of 7
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].nFalloffCoeff = 5; // this corresponds to 10 periods
|
|
||||||
consensus.vDeployments[Consensus::DEPLOYMENT_MN_RR].useEHF = true;
|
|
||||||
|
|
||||||
// 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");
|
||||||
|
|
||||||
@ -1036,6 +1003,8 @@ static void MaybeUpdateHeights(const ArgsManager& args, Consensus::Params& conse
|
|||||||
consensus.DIP0020Height = int{height};
|
consensus.DIP0020Height = int{height};
|
||||||
} else if (name == "v20") {
|
} else if (name == "v20") {
|
||||||
consensus.V20Height = int{height};
|
consensus.V20Height = int{height};
|
||||||
|
} else if (name == "mn_rr") {
|
||||||
|
consensus.MN_RRHeight = int{height};
|
||||||
} else {
|
} else {
|
||||||
throw std::runtime_error(strprintf("Invalid name (%s) for -testactivationheight=name@height.", arg));
|
throw std::runtime_error(strprintf("Invalid name (%s) for -testactivationheight=name@height.", arg));
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ void SetupChainParamsBaseOptions(ArgsManager& argsman)
|
|||||||
argsman.AddArg("-dip3params=<activation>:<enforcement>", "Override DIP3 activation and enforcement heights (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-dip3params=<activation>:<enforcement>", "Override DIP3 activation and enforcement heights (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-dip8params=<activation>", "Override DIP8 activation height (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-dip8params=<activation>", "Override DIP8 activation height (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-bip147height=<activation>", "Override BIP147 activation height (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-bip147height=<activation>", "Override BIP147 activation height (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (bip147, bip34, dersig, cltv, csv, brr, dip0001, dip0008, dip0020, v20). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
argsman.AddArg("-testactivationheight=name@height.", "Set the activation height of 'name' (bip147, bip34, dersig, cltv, csv, brr, dip0001, dip0008, dip0020, v20, mn_rr). (regtest-only)", ArgsManager::ALLOW_ANY | ArgsManager::DEBUG_ONLY, OptionsCategory::DEBUG_TEST);
|
||||||
argsman.AddArg("-highsubsidyblocks=<n>", "The number of blocks with a higher than normal subsidy to mine at the start of a chain. Block after that height will have fixed subsidy base. (default: 0, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-highsubsidyblocks=<n>", "The number of blocks with a higher than normal subsidy to mine at the start of a chain. Block after that height will have fixed subsidy base. (default: 0, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-highsubsidyfactor=<n>", "The factor to multiply the normal block subsidy by while in the highsubsidyblocks window of a chain (default: 1, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-highsubsidyfactor=<n>", "The factor to multiply the normal block subsidy by while in the highsubsidyblocks window of a chain (default: 1, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
argsman.AddArg("-llmqchainlocks=<quorum name>", "Override the default LLMQ type used for ChainLocks. Allows using ChainLocks with smaller LLMQs. (default: llmq_devnet, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
argsman.AddArg("-llmqchainlocks=<quorum name>", "Override the default LLMQ type used for ChainLocks. Allows using ChainLocks with smaller LLMQs. (default: llmq_devnet, devnet-only)", ArgsManager::ALLOW_ANY, OptionsCategory::CHAINPARAMS);
|
||||||
|
@ -33,12 +33,12 @@ enum BuriedDeployment : int16_t {
|
|||||||
DEPLOYMENT_BRR,
|
DEPLOYMENT_BRR,
|
||||||
DEPLOYMENT_V19,
|
DEPLOYMENT_V19,
|
||||||
DEPLOYMENT_V20,
|
DEPLOYMENT_V20,
|
||||||
|
DEPLOYMENT_MN_RR,
|
||||||
};
|
};
|
||||||
constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_V20; }
|
constexpr bool ValidDeployment(BuriedDeployment dep) { return dep <= DEPLOYMENT_MN_RR; }
|
||||||
|
|
||||||
enum DeploymentPos : uint16_t {
|
enum DeploymentPos : uint16_t {
|
||||||
DEPLOYMENT_TESTDUMMY,
|
DEPLOYMENT_TESTDUMMY,
|
||||||
DEPLOYMENT_MN_RR, // Deployment of Masternode Reward Location Reallocation
|
|
||||||
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
|
// NOTE: Also add new deployments to VersionBitsDeploymentInfo in deploymentinfo.cpp
|
||||||
MAX_VERSION_BITS_DEPLOYMENTS
|
MAX_VERSION_BITS_DEPLOYMENTS
|
||||||
};
|
};
|
||||||
@ -144,6 +144,8 @@ struct Params {
|
|||||||
int V19Height;
|
int V19Height;
|
||||||
/** Block height at which V20 (Deployment of EHF, LLMQ Randomness Beacon) becomes active */
|
/** Block height at which V20 (Deployment of EHF, LLMQ Randomness Beacon) becomes active */
|
||||||
int V20Height;
|
int V20Height;
|
||||||
|
/** Block height at which MN_RR (Deployment of Masternode Reward Location Reallocation) becomes active */
|
||||||
|
int MN_RRHeight;
|
||||||
/** Don't warn about unknown BIP 9 activations below this height.
|
/** Don't warn about unknown BIP 9 activations below this height.
|
||||||
* This prevents us from warning about the CSV and DIP activations. */
|
* This prevents us from warning about the CSV and DIP activations. */
|
||||||
int MinBIP9WarningHeight;
|
int MinBIP9WarningHeight;
|
||||||
@ -209,6 +211,8 @@ struct Params {
|
|||||||
return V19Height;
|
return V19Height;
|
||||||
case DEPLOYMENT_V20:
|
case DEPLOYMENT_V20:
|
||||||
return V20Height;
|
return V20Height;
|
||||||
|
case DEPLOYMENT_MN_RR:
|
||||||
|
return MN_RRHeight;
|
||||||
} // no default case, so the compiler can warn about missing cases
|
} // no default case, so the compiler can warn about missing cases
|
||||||
return std::numeric_limits<int>::max();
|
return std::numeric_limits<int>::max();
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,6 @@ const struct VBDeploymentInfo VersionBitsDeploymentInfo[Consensus::MAX_VERSION_B
|
|||||||
/*.name =*/ "testdummy",
|
/*.name =*/ "testdummy",
|
||||||
/*.gbt_force =*/ true,
|
/*.gbt_force =*/ true,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
/*.name =*/"mn_rr",
|
|
||||||
/*.gbt_force =*/true,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string DeploymentName(Consensus::BuriedDeployment dep)
|
std::string DeploymentName(Consensus::BuriedDeployment dep)
|
||||||
@ -47,6 +43,8 @@ std::string DeploymentName(Consensus::BuriedDeployment dep)
|
|||||||
return "v19";
|
return "v19";
|
||||||
case Consensus::DEPLOYMENT_V20:
|
case Consensus::DEPLOYMENT_V20:
|
||||||
return "v20";
|
return "v20";
|
||||||
|
case Consensus::DEPLOYMENT_MN_RR:
|
||||||
|
return "mn_rr";
|
||||||
} // no default case, so the compiler can warn about missing cases
|
} // no default case, so the compiler can warn about missing cases
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -1840,7 +1840,7 @@ RPCHelpMan getblockchaininfo()
|
|||||||
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_BRR);
|
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_BRR);
|
||||||
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_V19);
|
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_V19);
|
||||||
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_V20);
|
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_V20);
|
||||||
SoftForkDescPushBack(tip, ehfSignals, softforks, consensusParams, Consensus::DEPLOYMENT_MN_RR);
|
SoftForkDescPushBack(tip, softforks, consensusParams, Consensus::DEPLOYMENT_MN_RR);
|
||||||
SoftForkDescPushBack(tip, ehfSignals, softforks, consensusParams, Consensus::DEPLOYMENT_TESTDUMMY);
|
SoftForkDescPushBack(tip, ehfSignals, softforks, consensusParams, Consensus::DEPLOYMENT_TESTDUMMY);
|
||||||
|
|
||||||
obj.pushKV("softforks", softforks);
|
obj.pushKV("softforks", softforks);
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
#include <validation.h>
|
#include <validation.h>
|
||||||
|
|
||||||
#include <evo/deterministicmns.h>
|
#include <evo/deterministicmns.h>
|
||||||
#include <evo/mnhftx.h>
|
|
||||||
#include <evo/providertx.h>
|
#include <evo/providertx.h>
|
||||||
#include <evo/specialtx.h>
|
#include <evo/specialtx.h>
|
||||||
#include <masternode/payments.h>
|
#include <masternode/payments.h>
|
||||||
@ -37,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", "-testactivationheight=v20@1200",
|
TestChainSetup(497, {"-dip3params=30:50", "-testactivationheight=brr@1000", "-testactivationheight=v20@1200",
|
||||||
"-vbparams=mn_rr:0:999999999999:0:20:16:12:5:1"})
|
"-testactivationheight=mn_rr@2200"})
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -230,8 +229,7 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
|
|||||||
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, 14423624841); // 0.4999999999
|
BOOST_CHECK_EQUAL(pblocktemplate->voutMasternodePayments[0].nValue, 14423624841); // 0.4999999999
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reallocation should kick-in with the superblock mined at height = 2010,
|
// Reallocation should kick-in with the superblock after 19 adjustments, 3 superblocks long each
|
||||||
// there will be 19 adjustments, 3 superblocks long each
|
|
||||||
for ([[maybe_unused]] auto i : irange::range(19)) {
|
for ([[maybe_unused]] auto i : irange::range(19)) {
|
||||||
for ([[maybe_unused]] auto j : irange::range(3)) {
|
for ([[maybe_unused]] auto j : irange::range(3)) {
|
||||||
for ([[maybe_unused]] auto k : irange::range(consensus_params.nSuperblockCycle)) {
|
for ([[maybe_unused]] auto k : irange::range(consensus_params.nSuperblockCycle)) {
|
||||||
@ -268,12 +266,6 @@ BOOST_FIXTURE_TEST_CASE(block_reward_reallocation, TestChainBRRBeforeActivationS
|
|||||||
}
|
}
|
||||||
BOOST_CHECK(!DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), consensus_params, Consensus::DEPLOYMENT_MN_RR));
|
BOOST_CHECK(!DeploymentActiveAfter(m_node.chainman->ActiveChain().Tip(), consensus_params, Consensus::DEPLOYMENT_MN_RR));
|
||||||
|
|
||||||
// Activate EHF "MN_RR"
|
|
||||||
{
|
|
||||||
LOCK(cs_main);
|
|
||||||
m_node.mnhf_manager->AddSignal(m_node.chainman->ActiveChain().Tip(), 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reward split should stay ~75/25 after reallocation is done,
|
// Reward split should stay ~75/25 after reallocation is done,
|
||||||
// check 10 next superblocks
|
// check 10 next superblocks
|
||||||
for ([[maybe_unused]] auto i : irange::range(10)) {
|
for ([[maybe_unused]] auto i : irange::range(10)) {
|
||||||
|
@ -47,7 +47,11 @@ blocks_in_one_day = 576
|
|||||||
|
|
||||||
class AssetLocksTest(DashTestFramework):
|
class AssetLocksTest(DashTestFramework):
|
||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.set_dash_test_params(4, 2, [["-whitelist=127.0.0.1", "-llmqtestinstantsenddip0024=llmq_test_instantsend"]] * 4, evo_count=2)
|
self.set_dash_test_params(4, 2, [[
|
||||||
|
"-whitelist=127.0.0.1",
|
||||||
|
"-llmqtestinstantsenddip0024=llmq_test_instantsend",
|
||||||
|
"-testactivationheight=mn_rr@2500",
|
||||||
|
]] * 4, evo_count=2)
|
||||||
|
|
||||||
def skip_test_if_missing_module(self):
|
def skip_test_if_missing_module(self):
|
||||||
self.skip_if_no_wallet()
|
self.skip_if_no_wallet()
|
||||||
@ -626,8 +630,7 @@ class AssetLocksTest(DashTestFramework):
|
|||||||
def test_mn_rr(self, node_wallet, node, pubkey):
|
def test_mn_rr(self, node_wallet, node, pubkey):
|
||||||
self.log.info("Activate mn_rr...")
|
self.log.info("Activate mn_rr...")
|
||||||
locked = self.get_credit_pool_balance()
|
locked = self.get_credit_pool_balance()
|
||||||
node.generate(12 - node.getblockcount() % 12)
|
self.activate_mn_rr(expected_activation_height=2500)
|
||||||
self.activate_mn_rr(expected_activation_height=node.getblockcount() + 12 * 3)
|
|
||||||
self.log.info(f'height: {node.getblockcount()} credit: {self.get_credit_pool_balance()}')
|
self.log.info(f'height: {node.getblockcount()} credit: {self.get_credit_pool_balance()}')
|
||||||
assert_equal(locked, self.get_credit_pool_balance())
|
assert_equal(locked, self.get_credit_pool_balance())
|
||||||
|
|
||||||
@ -639,7 +642,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, 37015386)
|
assert_equal(platform_reward, 34371430)
|
||||||
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()
|
||||||
|
@ -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)
|
self.set_dash_test_params(5, 4, [["-testactivationheight=mn_rr@1100"]] * 5)
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
|
|
||||||
@ -249,7 +249,7 @@ class LLMQChainLocksTest(DashTestFramework):
|
|||||||
self.log.info("Test that bestCLHeightDiff conditions are relaxed before mn_rr")
|
self.log.info("Test that bestCLHeightDiff conditions are relaxed before mn_rr")
|
||||||
self.test_bestCLHeightDiff(False)
|
self.test_bestCLHeightDiff(False)
|
||||||
|
|
||||||
self.activate_mn_rr()
|
self.activate_mn_rr(expected_activation_height=1100)
|
||||||
self.log.info("Activated mn_rr at height:" + str(self.nodes[0].getblockcount()))
|
self.log.info("Activated mn_rr at height:" + str(self.nodes[0].getblockcount()))
|
||||||
|
|
||||||
self.log.info("Test that bestCLHeightDiff conditions are stricter after mn_rr")
|
self.log.info("Test that bestCLHeightDiff conditions are stricter after mn_rr")
|
||||||
|
@ -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, evo_count=5)
|
self.set_dash_test_params(5, 4, [["-testactivationheight=mn_rr@1200"]] * 5, 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):
|
||||||
@ -112,11 +112,11 @@ class LLMQEvoNodesTest(DashTestFramework):
|
|||||||
self.test_evo_protx_are_in_mnlist(evo_protxhash_list)
|
self.test_evo_protx_are_in_mnlist(evo_protxhash_list)
|
||||||
|
|
||||||
self.log.info("Test that EvoNodes are paid 4x blocks in a row")
|
self.log.info("Test that EvoNodes are paid 4x blocks in a row")
|
||||||
self.test_evo_payments(window_analysis=48)
|
self.test_evo_payments(window_analysis=48, mnrr_active=False)
|
||||||
self.test_masternode_winners()
|
self.test_masternode_winners()
|
||||||
|
|
||||||
self.activate_mn_rr()
|
self.activate_mn_rr()
|
||||||
self.log.info("Activated MN RewardReallocation at height:" + str(self.nodes[0].getblockcount()))
|
self.log.info("Activated MN RewardReallocation, current height:" + str(self.nodes[0].getblockcount()))
|
||||||
|
|
||||||
# Generate a few blocks to make EvoNode/MN analysis on a pure MN RewardReallocation window
|
# Generate a few blocks to make EvoNode/MN analysis on a pure MN RewardReallocation window
|
||||||
self.bump_mocktime(1)
|
self.bump_mocktime(1)
|
||||||
@ -131,7 +131,7 @@ class LLMQEvoNodesTest(DashTestFramework):
|
|||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def test_evo_payments(self, window_analysis, mnrr_active=False):
|
def test_evo_payments(self, window_analysis, mnrr_active):
|
||||||
current_evo = None
|
current_evo = None
|
||||||
consecutive_payments = 0
|
consecutive_payments = 0
|
||||||
n_payments = 0 if mnrr_active else 4
|
n_payments = 0 if mnrr_active else 4
|
||||||
|
@ -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)
|
self.set_dash_test_params(5, 4, [["-testactivationheight=mn_rr@2000"]] * 5)
|
||||||
self.set_dash_llmq_test_params(4, 4)
|
self.set_dash_llmq_test_params(4, 4)
|
||||||
self.supports_cli = False
|
self.supports_cli = False
|
||||||
|
|
||||||
|
@ -156,17 +156,7 @@ class BlockchainTest(BitcoinTestFramework):
|
|||||||
'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': 900},
|
'v20': { 'type': 'buried', 'active': False, 'height': 900},
|
||||||
'mn_rr': {
|
'mn_rr': { 'type': 'buried', 'active': False, 'height': 900},
|
||||||
'type': 'bip9',
|
|
||||||
'bip9': {
|
|
||||||
'status': 'defined',
|
|
||||||
'start_time': 0,
|
|
||||||
'timeout': 9223372036854775807,
|
|
||||||
'since': 0,
|
|
||||||
'min_activation_height': 0,
|
|
||||||
'ehf': True,
|
|
||||||
},
|
|
||||||
'active': False},
|
|
||||||
'testdummy': {
|
'testdummy': {
|
||||||
'type': 'bip9',
|
'type': 'bip9',
|
||||||
'bip9': {
|
'bip9': {
|
||||||
|
@ -64,6 +64,7 @@ def create_block(hashprev=None, coinbase=None, ntime=None, *, version=None, tmpl
|
|||||||
block.calc_sha256()
|
block.calc_sha256()
|
||||||
return block
|
return block
|
||||||
|
|
||||||
|
# TODO: imlement MN_RR support here or remove it
|
||||||
def create_block_with_mnpayments(mninfo, node, vtx=None, mn_payee=None, mn_amount=None):
|
def create_block_with_mnpayments(mninfo, node, vtx=None, mn_payee=None, mn_amount=None):
|
||||||
if vtx is None:
|
if vtx is None:
|
||||||
vtx = []
|
vtx = []
|
||||||
|
@ -47,7 +47,6 @@ from .util import (
|
|||||||
check_json_precision,
|
check_json_precision,
|
||||||
copy_datadir,
|
copy_datadir,
|
||||||
force_finish_mnsync,
|
force_finish_mnsync,
|
||||||
get_bip9_details,
|
|
||||||
get_datadir_path,
|
get_datadir_path,
|
||||||
initialize_datadir,
|
initialize_datadir,
|
||||||
p2p_port,
|
p2p_port,
|
||||||
@ -1185,23 +1184,8 @@ class DashTestFramework(BitcoinTestFramework):
|
|||||||
def activate_v20(self, expected_activation_height=None):
|
def activate_v20(self, expected_activation_height=None):
|
||||||
self.activate_by_name('v20', expected_activation_height)
|
self.activate_by_name('v20', expected_activation_height)
|
||||||
|
|
||||||
def activate_ehf_by_name(self, name, expected_activation_height=None):
|
|
||||||
self.nodes[0].sporkupdate("SPORK_24_TEST_EHF", 0)
|
|
||||||
self.wait_for_sporks_same()
|
|
||||||
assert get_bip9_details(self.nodes[0], name)['ehf']
|
|
||||||
ehf_height = 0
|
|
||||||
while ehf_height == 0:
|
|
||||||
time.sleep(1)
|
|
||||||
try:
|
|
||||||
ehf_height = get_bip9_details(self.nodes[0], name)['ehf_height']
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
self.nodes[0].generate(1)
|
|
||||||
self.sync_all()
|
|
||||||
self.activate_by_name(name, expected_activation_height)
|
|
||||||
|
|
||||||
def activate_mn_rr(self, expected_activation_height=None):
|
def activate_mn_rr(self, expected_activation_height=None):
|
||||||
self.activate_ehf_by_name('mn_rr', expected_activation_height)
|
self.activate_by_name('mn_rr', 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
|
||||||
|
Loading…
Reference in New Issue
Block a user