Changeset View
Changeset View
Standalone View
Standalone View
src/consensus/validation.h
Show First 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | |||||
class CValidationState { | class CValidationState { | ||||
private: | private: | ||||
enum mode_state { | enum mode_state { | ||||
MODE_VALID, //!< everything ok | MODE_VALID, //!< everything ok | ||||
MODE_INVALID, //!< network rule violation (DoS value may be set) | MODE_INVALID, //!< network rule violation (DoS value may be set) | ||||
MODE_ERROR, //!< run-time error | MODE_ERROR, //!< run-time error | ||||
} mode; | } mode; | ||||
ValidationInvalidReason m_reason; | ValidationInvalidReason m_reason; | ||||
int nDoS; | |||||
std::string strRejectReason; | std::string strRejectReason; | ||||
unsigned int chRejectCode; | unsigned int chRejectCode; | ||||
bool corruptionPossible; | |||||
std::string strDebugMessage; | std::string strDebugMessage; | ||||
public: | public: | ||||
CValidationState() | CValidationState() | ||||
: mode(MODE_VALID), m_reason(ValidationInvalidReason::NONE), nDoS(0), | : mode(MODE_VALID), m_reason(ValidationInvalidReason::NONE), | ||||
chRejectCode(0), corruptionPossible(false) {} | chRejectCode(0) {} | ||||
bool DoS(int level, ValidationInvalidReason reasonIn, bool ret = false, | bool DoS(int level, ValidationInvalidReason reasonIn, bool ret = false, | ||||
unsigned int chRejectCodeIn = 0, | unsigned int chRejectCodeIn = 0, | ||||
const std::string &strRejectReasonIn = "", | const std::string &strRejectReasonIn = "", | ||||
bool corruptionIn = false, | bool corruptionPossibleIn = false, | ||||
const std::string &strDebugMessageIn = "") { | const std::string &strDebugMessageIn = "") { | ||||
m_reason = reasonIn; | m_reason = reasonIn; | ||||
chRejectCode = chRejectCodeIn; | chRejectCode = chRejectCodeIn; | ||||
strRejectReason = strRejectReasonIn; | strRejectReason = strRejectReasonIn; | ||||
corruptionPossible = corruptionIn; | |||||
strDebugMessage = strDebugMessageIn; | strDebugMessage = strDebugMessageIn; | ||||
nDoS += level; | assert(corruptionPossibleIn == CorruptionPossible()); | ||||
assert(nDoS == GetDoSForReason()); | |||||
assert(corruptionPossible == | |||||
(m_reason == ValidationInvalidReason::BLOCK_MUTATED)); | |||||
if (mode == MODE_ERROR) { | if (mode == MODE_ERROR) { | ||||
return ret; | return ret; | ||||
} | } | ||||
mode = MODE_INVALID; | mode = MODE_INVALID; | ||||
return ret; | return ret; | ||||
} | } | ||||
bool Invalid(ValidationInvalidReason _reason, bool ret = false, | bool Invalid(ValidationInvalidReason _reason, bool ret = false, | ||||
unsigned int _chRejectCode = 0, | unsigned int _chRejectCode = 0, | ||||
Show All 9 Lines | bool Error(const std::string &strRejectReasonIn) { | ||||
mode = MODE_ERROR; | mode = MODE_ERROR; | ||||
return false; | return false; | ||||
} | } | ||||
bool IsValid() const { return mode == MODE_VALID; } | bool IsValid() const { return mode == MODE_VALID; } | ||||
bool IsInvalid() const { return mode == MODE_INVALID; } | bool IsInvalid() const { return mode == MODE_INVALID; } | ||||
bool IsError() const { return mode == MODE_ERROR; } | bool IsError() const { return mode == MODE_ERROR; } | ||||
bool CorruptionPossible() const { | bool CorruptionPossible() const { | ||||
assert(corruptionPossible == | return m_reason == ValidationInvalidReason::BLOCK_MUTATED; | ||||
(m_reason == ValidationInvalidReason::BLOCK_MUTATED)); | |||||
return corruptionPossible; | |||||
} | |||||
void SetCorruptionPossible() { | |||||
corruptionPossible = true; | |||||
assert(corruptionPossible == | |||||
(m_reason == ValidationInvalidReason::BLOCK_MUTATED)); | |||||
} | } | ||||
int GetDoS() const { return nDoS; } | int GetDoS() const { | ||||
int GetDoSForReason() const { | |||||
switch (m_reason) { | switch (m_reason) { | ||||
case ValidationInvalidReason::NONE: | case ValidationInvalidReason::NONE: | ||||
return 0; | return 0; | ||||
case ValidationInvalidReason::CONSENSUS: | case ValidationInvalidReason::CONSENSUS: | ||||
case ValidationInvalidReason::BLOCK_MUTATED: | case ValidationInvalidReason::BLOCK_MUTATED: | ||||
case ValidationInvalidReason::BLOCK_INVALID_HEADER: | case ValidationInvalidReason::BLOCK_INVALID_HEADER: | ||||
case ValidationInvalidReason::BLOCK_CHECKPOINT: | case ValidationInvalidReason::BLOCK_CHECKPOINT: | ||||
case ValidationInvalidReason::BLOCK_INVALID_PREV: | case ValidationInvalidReason::BLOCK_INVALID_PREV: | ||||
Show All 23 Lines |