Ensure that Sapling version range checks are always guarded by SAPLING_VERSION_GROUP_ID
This commit is contained in:
parent
766abede57
commit
da3eb82e96
31
src/main.cpp
31
src/main.cpp
|
@ -883,14 +883,14 @@ bool ContextualCheckTransaction(
|
|||
// Rules that apply to Sapling and later:
|
||||
if (saplingActive) {
|
||||
// Reject transactions with invalid version
|
||||
if (tx.nVersion < SAPLING_MIN_TX_VERSION) {
|
||||
return state.DoS(
|
||||
dosLevelConstricting,
|
||||
error("ContextualCheckTransaction(): Sapling version too low"),
|
||||
REJECT_INVALID, "bad-tx-sapling-version-too-low");
|
||||
}
|
||||
if (tx.nVersionGroupId == SAPLING_VERSION_GROUP_ID) {
|
||||
if (tx.nVersion < SAPLING_MIN_TX_VERSION) {
|
||||
return state.DoS(
|
||||
dosLevelConstricting,
|
||||
error("ContextualCheckTransaction(): Sapling version too low"),
|
||||
REJECT_INVALID, "bad-tx-sapling-version-too-low");
|
||||
}
|
||||
|
||||
if (!futureActive) {
|
||||
// Reject transactions with invalid version
|
||||
if (tx.nVersion > SAPLING_MAX_TX_VERSION) {
|
||||
return state.DoS(
|
||||
|
@ -898,7 +898,9 @@ bool ContextualCheckTransaction(
|
|||
error("ContextualCheckTransaction(): Sapling version too high"),
|
||||
REJECT_INVALID, "bad-tx-sapling-version-too-high");
|
||||
}
|
||||
}
|
||||
|
||||
if (!futureActive) {
|
||||
// Reject transactions with invalid version group id
|
||||
if (tx.nVersionGroupId != SAPLING_VERSION_GROUP_ID) {
|
||||
return state.DoS(
|
||||
|
@ -1041,6 +1043,13 @@ bool ContextualCheckTransaction(
|
|||
if (futureActive) {
|
||||
// version group is the most recent available version group ID
|
||||
if (tx.nVersionGroupId == ZFUTURE_VERSION_GROUP_ID) {
|
||||
if (tx.nVersion <= SAPLING_MAX_TX_VERSION) {
|
||||
return state.DoS(
|
||||
dosLevelConstricting,
|
||||
error("ContextualCheckTransaction(): Future version too low"),
|
||||
REJECT_INVALID, "bad-tx-zfuture-version-too-low");
|
||||
}
|
||||
|
||||
// Reject transactions with invalid version
|
||||
if (tx.nVersion > SAPLING_MAX_TX_VERSION + 1) {
|
||||
return state.DoS(
|
||||
|
@ -1049,13 +1058,7 @@ bool ContextualCheckTransaction(
|
|||
REJECT_INVALID, "bad-tx-zfuture-version-too-high");
|
||||
}
|
||||
} else if (tx.nVersionGroupId == SAPLING_VERSION_GROUP_ID) {
|
||||
// Reject transactions with invalid version
|
||||
if (tx.nVersion > SAPLING_MAX_TX_VERSION) {
|
||||
return state.DoS(
|
||||
dosLevelPotentiallyRelaxing,
|
||||
error("ContextualCheckTransaction(): Sapling version too high"),
|
||||
REJECT_INVALID, "bad-tx-sapling-version-too-high");
|
||||
}
|
||||
//allow V4 transactions while futureActive
|
||||
} else {
|
||||
return state.DoS(
|
||||
dosLevelPotentiallyRelaxing,
|
||||
|
|
Loading…
Reference in New Issue