|
|
@ -80,18 +80,9 @@ private:
|
|
|
|
std::string strDebugMessage;
|
|
|
|
std::string strDebugMessage;
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
CValidationState() : mode(MODE_VALID), m_reason(ValidationInvalidReason::NONE), chRejectCode(0) {}
|
|
|
|
CValidationState() : mode(MODE_VALID), m_reason(ValidationInvalidReason::NONE), chRejectCode(0) {}
|
|
|
|
bool DoS(int level, ValidationInvalidReason reasonIn, bool ret = false,
|
|
|
|
|
|
|
|
unsigned int chRejectCodeIn=0, const std::string &strRejectReasonIn="",
|
|
|
|
|
|
|
|
bool corruptionPossibleIn=false,
|
|
|
|
|
|
|
|
const std::string &strDebugMessageIn="") {
|
|
|
|
|
|
|
|
ret = Invalid(reasonIn, ret, chRejectCodeIn, strRejectReasonIn, strDebugMessageIn);
|
|
|
|
|
|
|
|
assert(level == GetDoS());
|
|
|
|
|
|
|
|
assert(corruptionPossibleIn == CorruptionPossible());
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Invalid(ValidationInvalidReason reasonIn, bool ret = false,
|
|
|
|
bool Invalid(ValidationInvalidReason reasonIn, bool ret = false,
|
|
|
|
unsigned int chRejectCodeIn=0, const std::string &strRejectReasonIn="",
|
|
|
|
unsigned int chRejectCodeIn=0, const std::string &strRejectReasonIn="",
|
|
|
|
const std::string &strDebugMessageIn="") {
|
|
|
|
const std::string &strDebugMessageIn="") {
|
|
|
|
m_reason = reasonIn;
|
|
|
|
m_reason = reasonIn;
|
|
|
|
chRejectCode = chRejectCodeIn;
|
|
|
|
chRejectCode = chRejectCodeIn;
|
|
|
|
strRejectReason = strRejectReasonIn;
|
|
|
|
strRejectReason = strRejectReasonIn;
|
|
|
@ -116,33 +107,6 @@ public:
|
|
|
|
bool IsError() const {
|
|
|
|
bool IsError() const {
|
|
|
|
return mode == MODE_ERROR;
|
|
|
|
return mode == MODE_ERROR;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bool CorruptionPossible() const {
|
|
|
|
|
|
|
|
return m_reason == ValidationInvalidReason::BLOCK_MUTATED || m_reason == ValidationInvalidReason::TX_WITNESS_MUTATED;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
int GetDoS() const {
|
|
|
|
|
|
|
|
switch (m_reason) {
|
|
|
|
|
|
|
|
case ValidationInvalidReason::NONE:
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
case ValidationInvalidReason::CONSENSUS:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_MUTATED:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_INVALID_HEADER:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_CHECKPOINT:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_INVALID_PREV:
|
|
|
|
|
|
|
|
return 100;
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_MISSING_PREV:
|
|
|
|
|
|
|
|
return 10;
|
|
|
|
|
|
|
|
case ValidationInvalidReason::CACHED_INVALID:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::RECENT_CONSENSUS_CHANGE:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::BLOCK_TIME_FUTURE:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::TX_NOT_STANDARD:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::TX_MISSING_INPUTS:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::TX_WITNESS_MUTATED:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::TX_CONFLICT:
|
|
|
|
|
|
|
|
case ValidationInvalidReason::TX_MEMPOOL_POLICY:
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ValidationInvalidReason GetReason() const { return m_reason; }
|
|
|
|
ValidationInvalidReason GetReason() const { return m_reason; }
|
|
|
|
unsigned int GetRejectCode() const { return chRejectCode; }
|
|
|
|
unsigned int GetRejectCode() const { return chRejectCode; }
|
|
|
|
std::string GetRejectReason() const { return strRejectReason; }
|
|
|
|
std::string GetRejectReason() const { return strRejectReason; }
|
|
|
|