Pull script verify flags calculation out of ConnectBlock
This commit is contained in:
parent
75e898c094
commit
6d22b2b17b
1 changed files with 40 additions and 22 deletions
|
@ -312,6 +312,9 @@ bool CheckSequenceLocks(const CTransaction &tx, int flags, LockPoints* lp, bool
|
||||||
return EvaluateSequenceLocks(index, lockPair);
|
return EvaluateSequenceLocks(index, lockPair);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the script flags which should be checked for a given block
|
||||||
|
static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consensus::Params& chainparams);
|
||||||
|
|
||||||
static void LimitMempoolSize(CTxMemPool& pool, size_t limit, unsigned long age) {
|
static void LimitMempoolSize(CTxMemPool& pool, size_t limit, unsigned long age) {
|
||||||
int expired = pool.Expire(GetTime() - age);
|
int expired = pool.Expire(GetTime() - age);
|
||||||
if (expired != 0) {
|
if (expired != 0) {
|
||||||
|
@ -1475,6 +1478,41 @@ public:
|
||||||
// Protected by cs_main
|
// Protected by cs_main
|
||||||
static ThresholdConditionCache warningcache[VERSIONBITS_NUM_BITS];
|
static ThresholdConditionCache warningcache[VERSIONBITS_NUM_BITS];
|
||||||
|
|
||||||
|
static unsigned int GetBlockScriptFlags(const CBlockIndex* pindex, const Consensus::Params& consensusparams) {
|
||||||
|
AssertLockHeld(cs_main);
|
||||||
|
|
||||||
|
// BIP16 didn't become active until Apr 1 2012
|
||||||
|
int64_t nBIP16SwitchTime = 1333238400;
|
||||||
|
bool fStrictPayToScriptHash = (pindex->GetBlockTime() >= nBIP16SwitchTime);
|
||||||
|
|
||||||
|
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
|
||||||
|
|
||||||
|
// Start enforcing the DERSIG (BIP66) rule
|
||||||
|
if (pindex->nHeight >= consensusparams.BIP66Height) {
|
||||||
|
flags |= SCRIPT_VERIFY_DERSIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start enforcing CHECKLOCKTIMEVERIFY (BIP65) rule
|
||||||
|
if (pindex->nHeight >= consensusparams.BIP65Height) {
|
||||||
|
flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start enforcing BIP68 (sequence locks) and BIP112 (CHECKSEQUENCEVERIFY) using versionbits logic.
|
||||||
|
if (VersionBitsState(pindex->pprev, consensusparams, Consensus::DEPLOYMENT_CSV, versionbitscache) == THRESHOLD_ACTIVE) {
|
||||||
|
flags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start enforcing WITNESS rules using versionbits logic.
|
||||||
|
if (IsWitnessEnabled(pindex->pprev, consensusparams)) {
|
||||||
|
flags |= SCRIPT_VERIFY_WITNESS;
|
||||||
|
flags |= SCRIPT_VERIFY_NULLDUMMY;
|
||||||
|
}
|
||||||
|
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int64_t nTimeCheck = 0;
|
static int64_t nTimeCheck = 0;
|
||||||
static int64_t nTimeForks = 0;
|
static int64_t nTimeForks = 0;
|
||||||
static int64_t nTimeVerify = 0;
|
static int64_t nTimeVerify = 0;
|
||||||
|
@ -1578,34 +1616,14 @@ static bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockInd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// BIP16 didn't become active until Apr 1 2012
|
|
||||||
int64_t nBIP16SwitchTime = 1333238400;
|
|
||||||
bool fStrictPayToScriptHash = (pindex->GetBlockTime() >= nBIP16SwitchTime);
|
|
||||||
|
|
||||||
unsigned int flags = fStrictPayToScriptHash ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE;
|
|
||||||
|
|
||||||
// Start enforcing the DERSIG (BIP66) rule
|
|
||||||
if (pindex->nHeight >= chainparams.GetConsensus().BIP66Height) {
|
|
||||||
flags |= SCRIPT_VERIFY_DERSIG;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start enforcing CHECKLOCKTIMEVERIFY (BIP65) rule
|
|
||||||
if (pindex->nHeight >= chainparams.GetConsensus().BIP65Height) {
|
|
||||||
flags |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start enforcing BIP68 (sequence locks) and BIP112 (CHECKSEQUENCEVERIFY) using versionbits logic.
|
// Start enforcing BIP68 (sequence locks) and BIP112 (CHECKSEQUENCEVERIFY) using versionbits logic.
|
||||||
int nLockTimeFlags = 0;
|
int nLockTimeFlags = 0;
|
||||||
if (VersionBitsState(pindex->pprev, chainparams.GetConsensus(), Consensus::DEPLOYMENT_CSV, versionbitscache) == THRESHOLD_ACTIVE) {
|
if (VersionBitsState(pindex->pprev, chainparams.GetConsensus(), Consensus::DEPLOYMENT_CSV, versionbitscache) == THRESHOLD_ACTIVE) {
|
||||||
flags |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY;
|
|
||||||
nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE;
|
nLockTimeFlags |= LOCKTIME_VERIFY_SEQUENCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start enforcing WITNESS rules using versionbits logic.
|
// Get the script flags for this block
|
||||||
if (IsWitnessEnabled(pindex->pprev, chainparams.GetConsensus())) {
|
unsigned int flags = GetBlockScriptFlags(pindex, chainparams.GetConsensus());
|
||||||
flags |= SCRIPT_VERIFY_WITNESS;
|
|
||||||
flags |= SCRIPT_VERIFY_NULLDUMMY;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t nTime2 = GetTimeMicros(); nTimeForks += nTime2 - nTime1;
|
int64_t nTime2 = GetTimeMicros(); nTimeForks += nTime2 - nTime1;
|
||||||
LogPrint(BCLog::BENCH, " - Fork checks: %.2fms [%.2fs]\n", 0.001 * (nTime2 - nTime1), nTimeForks * 0.000001);
|
LogPrint(BCLog::BENCH, " - Fork checks: %.2fms [%.2fs]\n", 0.001 * (nTime2 - nTime1), nTimeForks * 0.000001);
|
||||||
|
|
Loading…
Reference in a new issue