Merge pull request #5345 from str4d/nu5-standard-tx
Mark v5 transaction format as standard for NU5
This commit is contained in:
commit
ee8a8e67e8
|
@ -1787,7 +1787,7 @@ bool AcceptToMemoryPool(
|
|||
if (tx.IsCoinBase())
|
||||
return state.DoS(100, false, REJECT_INVALID, "coinbase");
|
||||
|
||||
// Rather not work on nonstandard transactions (unless -testnet/-regtest)
|
||||
// Rather not work on nonstandard transactions (unless -regtest)
|
||||
string reason;
|
||||
if (chainparams.RequireStandard() && !IsStandardTx(tx, reason, chainparams, nextBlockHeight))
|
||||
return state.DoS(0, false, REJECT_NONSTANDARD, reason);
|
||||
|
|
|
@ -59,8 +59,15 @@ bool IsStandardTx(const CTransaction& tx, std::string& reason, const CChainParam
|
|||
{
|
||||
bool overwinterActive = chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_OVERWINTER);
|
||||
bool saplingActive = chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_SAPLING);
|
||||
bool nu5Active = chainparams.GetConsensus().NetworkUpgradeActive(nHeight, Consensus::UPGRADE_NU5);
|
||||
|
||||
if (saplingActive) {
|
||||
if (nu5Active) {
|
||||
// NU5 standard rules apply
|
||||
if (tx.nVersion > CTransaction::NU5_MAX_CURRENT_VERSION || tx.nVersion < CTransaction::NU5_MIN_CURRENT_VERSION) {
|
||||
reason = "nu5-version";
|
||||
return false;
|
||||
}
|
||||
} else if (saplingActive) {
|
||||
// Sapling standard rules apply
|
||||
if (tx.nVersion > CTransaction::SAPLING_MAX_CURRENT_VERSION || tx.nVersion < CTransaction::SAPLING_MIN_CURRENT_VERSION) {
|
||||
reason = "sapling-version";
|
||||
|
|
|
@ -719,6 +719,8 @@ public:
|
|||
static const int32_t OVERWINTER_MAX_CURRENT_VERSION = 3;
|
||||
static const int32_t SAPLING_MIN_CURRENT_VERSION = 4;
|
||||
static const int32_t SAPLING_MAX_CURRENT_VERSION = 4;
|
||||
static const int32_t NU5_MIN_CURRENT_VERSION = 4;
|
||||
static const int32_t NU5_MAX_CURRENT_VERSION = 5;
|
||||
|
||||
static_assert(SPROUT_MIN_CURRENT_VERSION >= SPROUT_MIN_TX_VERSION,
|
||||
"standard rule for tx version should be consistent with network rule");
|
||||
|
@ -737,6 +739,13 @@ public:
|
|||
SAPLING_MAX_CURRENT_VERSION >= SAPLING_MIN_CURRENT_VERSION),
|
||||
"standard rule for tx version should be consistent with network rule");
|
||||
|
||||
static_assert(NU5_MIN_CURRENT_VERSION >= SAPLING_MIN_TX_VERSION,
|
||||
"standard rule for tx version should be consistent with network rule");
|
||||
|
||||
static_assert( (NU5_MAX_CURRENT_VERSION <= ZIP225_MAX_TX_VERSION &&
|
||||
NU5_MAX_CURRENT_VERSION >= NU5_MIN_CURRENT_VERSION),
|
||||
"standard rule for tx version should be consistent with network rule");
|
||||
|
||||
// The local variables are made const to prevent unintended modification
|
||||
// without updating the cached hash value. However, CTransaction is not
|
||||
// actually immutable; deserialization and assignment are implemented,
|
||||
|
|
Loading…
Reference in New Issue