mirror of
https://github.com/jwinterm/myriadcoin.git
synced 2026-10-20 06:08:43 +02:00
Set minimum block height for forks (algo switch, BIP66, BIP65, seq algo count)
This commit is contained in:
+2
-4
@@ -59,7 +59,6 @@ public:
|
||||
|
||||
consensus.nBlockSequentialAlgoRuleStart1 = 740000; // block where sequential algo rule starts
|
||||
consensus.nBlockSequentialAlgoRuleStart2 = 766000; // block where sequential algo rule starts
|
||||
consensus.nBlockSequentialAlgoRuleStart3 = 100000000; // block where sequential algo rule starts ** TODO CHANGE LATER **
|
||||
consensus.nBlockSequentialAlgoMaxCount1 = 6; // maximum sequential blocks of same algo
|
||||
consensus.nBlockSequentialAlgoMaxCount2 = 3; // maximum sequential blocks of same algo
|
||||
consensus.nBlockSequentialAlgoMaxCount3 = 6; // maximum sequential blocks of same algo
|
||||
@@ -69,7 +68,7 @@ public:
|
||||
consensus.nBlockAlgoNormalisedWorkDecayStart1 = 866000; // block where weight decay starts
|
||||
consensus.nBlockAlgoNormalisedWorkDecayStart2 = 932000; // block where weight decay starts
|
||||
consensus.nGeoAvgWork_Start = 1400000;
|
||||
consensus.nAlgoSwitchBlock1 = 100000000;
|
||||
consensus.nFork1MinBlock = 100000000; // minimum block height where fork 1 takes effect (algo switch, BIP66, BIP65, seq algo count change)
|
||||
consensus.nMajorityEnableAlgoSwitch1 = 600;
|
||||
consensus.nAlgoSwitch1EnableWindow = 2000;
|
||||
|
||||
@@ -204,7 +203,6 @@ public:
|
||||
|
||||
consensus.nBlockSequentialAlgoRuleStart1 = 200; // block where sequential algo rule starts
|
||||
consensus.nBlockSequentialAlgoRuleStart2 = 250; // block where sequential algo rule starts
|
||||
consensus.nBlockSequentialAlgoRuleStart3 = 300; // block where sequential algo rule starts
|
||||
consensus.nBlockSequentialAlgoMaxCount1 = 6; // maximum sequential blocks of same algo
|
||||
consensus.nBlockSequentialAlgoMaxCount2 = 3; // maximum sequential blocks of same algo
|
||||
consensus.nBlockSequentialAlgoMaxCount3 = 6; // maximum sequential blocks of same algo
|
||||
@@ -214,7 +212,7 @@ public:
|
||||
consensus.nBlockAlgoNormalisedWorkDecayStart1 = 0; // block where weight decay starts
|
||||
consensus.nBlockAlgoNormalisedWorkDecayStart2 = 0; // block where weight decay starts
|
||||
consensus.nGeoAvgWork_Start = 150;
|
||||
consensus.nAlgoSwitchBlock1 = 300;
|
||||
consensus.nFork1MinBlock = 300;
|
||||
consensus.nMajorityEnableAlgoSwitch1 = 60;
|
||||
consensus.nAlgoSwitch1EnableWindow = 200;
|
||||
|
||||
|
||||
@@ -36,7 +36,6 @@ struct Params {
|
||||
int64_t nMaxAdjustUpV2;
|
||||
int64_t nBlockSequentialAlgoRuleStart1;
|
||||
int64_t nBlockSequentialAlgoRuleStart2;
|
||||
int64_t nBlockSequentialAlgoRuleStart3;
|
||||
int nBlockSequentialAlgoMaxCount1;
|
||||
int nBlockSequentialAlgoMaxCount2;
|
||||
int nBlockSequentialAlgoMaxCount3;
|
||||
@@ -45,7 +44,7 @@ struct Params {
|
||||
int64_t nBlockAlgoNormalisedWorkDecayStart1;
|
||||
int64_t nBlockAlgoNormalisedWorkDecayStart2;
|
||||
int64_t nGeoAvgWork_Start;
|
||||
int64_t nAlgoSwitchBlock1;
|
||||
int64_t nFork1MinBlock;
|
||||
int nMajorityEnableAlgoSwitch1;
|
||||
int nAlgoSwitch1EnableWindow;
|
||||
|
||||
|
||||
+35
-26
@@ -1974,14 +1974,17 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin
|
||||
unsigned int flags = SCRIPT_VERIFY_P2SH;
|
||||
|
||||
// Start enforcing the DERSIG (BIP66) rules, for block.nVersion=3 blocks, when 75% of the network has upgraded:
|
||||
if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) {
|
||||
flags |= SCRIPT_VERIFY_DERSIG;
|
||||
}
|
||||
if (pindex->nHeight >= chainparams.GetConsensus().nFork1MinBlock)
|
||||
{
|
||||
if (block.nVersion >= 3 && IsSuperMajority(3, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) {
|
||||
flags |= SCRIPT_VERIFY_DERSIG;
|
||||
}
|
||||
|
||||
// Start enforcing CHECKLOCKTIMEVERIFY, (BIP65) for block.nVersion=4
|
||||
// blocks, when 75% of the network has upgraded:
|
||||
if (block.nVersion >= 4 && IsSuperMajority(4, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) {
|
||||
flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;
|
||||
// Start enforcing CHECKLOCKTIMEVERIFY, (BIP65) for block.nVersion=4
|
||||
// blocks, when 75% of the network has upgraded:
|
||||
if (block.nVersion >= 4 && IsSuperMajority(4, pindex->pprev, chainparams.GetConsensus().nMajorityEnforceBlockUpgrade, chainparams.GetConsensus())) {
|
||||
flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;
|
||||
}
|
||||
}
|
||||
|
||||
CBlockUndo blockundo;
|
||||
@@ -2952,7 +2955,7 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||
// previous YESCRYPT block was mined or;
|
||||
// mining majority and fork height reached
|
||||
bool bAlgoSwitch1 = false;
|
||||
if (nHeight >= consensusParams.nAlgoSwitchBlock1)
|
||||
if (nHeight >= consensusParams.nFork1MinBlock)
|
||||
{
|
||||
bAlgoSwitch1 = IsAlgoSwitch1Active(pindexPrev, consensusParams);
|
||||
if (!bAlgoSwitch1)
|
||||
@@ -2986,20 +2989,23 @@ bool ContextualCheckBlockHeader(const CBlockHeader& block, CValidationState& sta
|
||||
return state.DoS(100, error("%s: forked chain older than last checkpoint (height %d)", __func__, nHeight));
|
||||
}
|
||||
|
||||
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
// if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
// return state.Invalid(error("%s: rejected nVersion=1 block", __func__),
|
||||
// REJECT_OBSOLETE, "bad-version");
|
||||
if (nHeight >= consensusParams.nFork1MinBlock)
|
||||
{
|
||||
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
// if (block.nVersion < 2 && IsSuperMajority(2, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
// return state.Invalid(error("%s: rejected nVersion=1 block", __func__),
|
||||
// REJECT_OBSOLETE, "bad-version");
|
||||
|
||||
// Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
return state.Invalid(error("%s : rejected nVersion=2 block", __func__),
|
||||
REJECT_OBSOLETE, "bad-version");
|
||||
// Reject block.nVersion=2 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
if (block.nVersion < 3 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
return state.Invalid(error("%s : rejected nVersion=2 block", __func__),
|
||||
REJECT_OBSOLETE, "bad-version");
|
||||
|
||||
// Reject block.nVersion=3 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
if (block.nVersion < 4 && IsSuperMajority(4, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
return state.Invalid(error("%s : rejected nVersion=3 block", __func__),
|
||||
REJECT_OBSOLETE, "bad-version");
|
||||
// Reject block.nVersion=3 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||
if (block.nVersion < 4 && IsSuperMajority(4, pindexPrev, consensusParams.nMajorityRejectBlockOutdated, consensusParams))
|
||||
return state.Invalid(error("%s : rejected nVersion=3 block", __func__),
|
||||
REJECT_OBSOLETE, "bad-version");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -3022,12 +3028,15 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn
|
||||
|
||||
// Enforce block.nVersion=2 rule that the coinbase starts with serialized block height
|
||||
// if 750 of the last 1,000 blocks are version 2 or greater (51/100 if testnet):
|
||||
if (block.nVersion >= 2 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
|
||||
if (nHeight >= consensusParams.nFork1MinBlock)
|
||||
{
|
||||
CScript expect = CScript() << nHeight;
|
||||
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||||
!std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) {
|
||||
return state.DoS(100, error("%s: block height mismatch in coinbase", __func__), REJECT_INVALID, "bad-cb-height");
|
||||
if (block.nVersion >= 2 && IsSuperMajority(3, pindexPrev, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams))
|
||||
{
|
||||
CScript expect = CScript() << nHeight;
|
||||
if (block.vtx[0].vin[0].scriptSig.size() < expect.size() ||
|
||||
!std::equal(expect.begin(), expect.end(), block.vtx[0].vin[0].scriptSig.begin())) {
|
||||
return state.DoS(100, error("%s: block height mismatch in coinbase", __func__), REJECT_INVALID, "bad-cb-height");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3076,7 +3085,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc
|
||||
|
||||
// Maximum sequence count allowed
|
||||
int nMaxSeqCount;
|
||||
if ( (nHeight > chainparams.GetConsensus().nBlockSequentialAlgoRuleStart3) &&
|
||||
if ( (nHeight > chainparams.GetConsensus().nFork1MinBlock) &&
|
||||
(block.nVersion > 3) &&
|
||||
IsSuperMajority(4, pindexPrev, chainparams.GetConsensus().nMajorityEnableAlgoSwitch1, chainparams.GetConsensus()) )
|
||||
nMaxSeqCount = chainparams.GetConsensus().nBlockSequentialAlgoMaxCount3;
|
||||
|
||||
@@ -540,6 +540,9 @@ Object SoftForkDesc(const std::string &name, int version, CBlockIndex* pindex, c
|
||||
Object rv;
|
||||
rv.push_back(Pair("id", name));
|
||||
rv.push_back(Pair("version", version));
|
||||
rv.push_back(Pair("minheight", consensusParams.nFork1MinBlock));
|
||||
bool bHeightActive = ((int)chainActive.Height() >= consensusParams.nFork1MinBlock);
|
||||
rv.push_back(Pair("condition-minheight", bHeightActive));
|
||||
rv.push_back(Pair("enforce", SoftForkMajorityDesc(version, pindex, consensusParams.nMajorityEnforceBlockUpgrade, consensusParams)));
|
||||
rv.push_back(Pair("reject", SoftForkMajorityDesc(version, pindex, consensusParams.nMajorityRejectBlockOutdated, consensusParams)));
|
||||
return rv;
|
||||
@@ -552,9 +555,9 @@ Object AlgoSwitch1ForkDesc(const std::string &name, int version, CBlockIndex* pi
|
||||
rv.push_back(Pair("version", version));
|
||||
Object bh;
|
||||
int nHeight = (int)chainActive.Height();
|
||||
bh.push_back(Pair("status", nHeight >= consensusParams.nAlgoSwitchBlock1));
|
||||
bh.push_back(Pair("status", nHeight >= consensusParams.nFork1MinBlock));
|
||||
bh.push_back(Pair("height", nHeight));
|
||||
bh.push_back(Pair("height-active", consensusParams.nAlgoSwitchBlock1));
|
||||
bh.push_back(Pair("height-active", consensusParams.nFork1MinBlock));
|
||||
rv.push_back(Pair("enforce-condition-blockheight", bh));
|
||||
rv.push_back(Pair("enforce-condition-majority", SoftForkMajorityDesc(version, pindex, consensusParams.nMajorityEnableAlgoSwitch1, consensusParams)));
|
||||
return rv;
|
||||
|
||||
Reference in New Issue
Block a user