Skip to content

Commit 54470e7

Browse files
committed
Assert validation reasons are contextually correct
1 parent 2120c31 commit 54470e7

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

src/consensus/validation.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,32 @@ enum class ValidationInvalidReason {
6666
TX_MEMPOOL_POLICY, //!< violated mempool's fee/size/descendant/RBF/etc limits
6767
};
6868

69+
inline bool IsTransactionReason(ValidationInvalidReason r)
70+
{
71+
return r == ValidationInvalidReason::NONE ||
72+
r == ValidationInvalidReason::CONSENSUS ||
73+
r == ValidationInvalidReason::RECENT_CONSENSUS_CHANGE ||
74+
r == ValidationInvalidReason::TX_NOT_STANDARD ||
75+
r == ValidationInvalidReason::TX_MISSING_INPUTS ||
76+
r == ValidationInvalidReason::TX_WITNESS_MUTATED ||
77+
r == ValidationInvalidReason::TX_CONFLICT ||
78+
r == ValidationInvalidReason::TX_MEMPOOL_POLICY;
79+
}
80+
81+
inline bool IsBlockReason(ValidationInvalidReason r)
82+
{
83+
return r == ValidationInvalidReason::NONE ||
84+
r == ValidationInvalidReason::CONSENSUS ||
85+
r == ValidationInvalidReason::RECENT_CONSENSUS_CHANGE ||
86+
r == ValidationInvalidReason::CACHED_INVALID ||
87+
r == ValidationInvalidReason::BLOCK_INVALID_HEADER ||
88+
r == ValidationInvalidReason::BLOCK_MUTATED ||
89+
r == ValidationInvalidReason::BLOCK_MISSING_PREV ||
90+
r == ValidationInvalidReason::BLOCK_INVALID_PREV ||
91+
r == ValidationInvalidReason::BLOCK_TIME_FUTURE ||
92+
r == ValidationInvalidReason::BLOCK_CHECKPOINT;
93+
}
94+
6995
/** Capture information about block/transaction validation */
7096
class CValidationState {
7197
private:

src/net_processing.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,7 @@ void Misbehaving(NodeId pnode, int howmuch, const std::string& message) EXCLUSIV
975975
*/
976976
static bool TxRelayMayResultInDisconnect(const CValidationState& state)
977977
{
978+
assert(IsTransactionReason(state.GetReason()));
978979
return state.GetReason() == ValidationInvalidReason::CONSENSUS;
979980
}
980981

@@ -1806,6 +1807,7 @@ void static ProcessOrphanTx(CConnman* connman, std::set<uint256>& orphan_work_se
18061807
// Has inputs but not accepted to mempool
18071808
// Probably non-standard or insufficient fee
18081809
LogPrint(BCLog::MEMPOOL, " removed orphan tx %s\n", orphanHash.ToString());
1810+
assert(IsTransactionReason(orphan_state.GetReason()));
18091811
if (!orphanTx.HasWitness() && orphan_state.GetReason() != ValidationInvalidReason::TX_WITNESS_MUTATED) {
18101812
// Do not use rejection cache for witness transactions or
18111813
// witness-stripped transactions, as they can have been malleated.
@@ -2523,6 +2525,7 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
25232525
recentRejects->insert(tx.GetHash());
25242526
}
25252527
} else {
2528+
assert(IsTransactionReason(state.GetReason()));
25262529
if (!tx.HasWitness() && state.GetReason() != ValidationInvalidReason::TX_WITNESS_MUTATED) {
25272530
// Do not use rejection cache for witness transactions or
25282531
// witness-stripped transactions, as they can have been malleated.

src/validation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,7 @@ static bool AcceptToMemoryPoolWorker(const CChainParams& chainparams, CTxMemPool
895895
state.Invalid(ValidationInvalidReason::TX_WITNESS_MUTATED, false,
896896
state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage());
897897
}
898+
assert(IsTransactionReason(state.GetReason()));
898899
return false; // state filled in by CheckInputs
899900
}
900901

@@ -1970,6 +1971,7 @@ bool CChainState::ConnectBlock(const CBlock& block, CValidationState& state, CBl
19701971
state.Invalid(ValidationInvalidReason::CONSENSUS, false,
19711972
state.GetRejectCode(), state.GetRejectReason(), state.GetDebugMessage());
19721973
}
1974+
assert(IsBlockReason(state.GetReason()));
19731975
return error("%s: Consensus::CheckTxInputs: %s, %s", __func__, tx.GetHash().ToString(), FormatStateMessage(state));
19741976
}
19751977
nFees += txfee;
@@ -3507,6 +3509,7 @@ bool CChainState::AcceptBlock(const std::shared_ptr<const CBlock>& pblock, CVali
35073509

35083510
if (!CheckBlock(block, state, chainparams.GetConsensus()) ||
35093511
!ContextualCheckBlock(block, state, chainparams.GetConsensus(), pindex->pprev)) {
3512+
assert(IsBlockReason(state.GetReason()));
35103513
if (state.IsInvalid() && state.GetReason() != ValidationInvalidReason::BLOCK_MUTATED) {
35113514
pindex->nStatus |= BLOCK_FAILED_VALID;
35123515
setDirtyBlockIndex.insert(pindex);

0 commit comments

Comments
 (0)