jtimon
10 years ago
committed by
Jorge Timón
16 changed files with 101 additions and 81 deletions
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
||||
// Copyright (c) 2009-2014 The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
#ifndef BITCOIN_CONSENSUS_VALIDATION_H |
||||
#define BITCOIN_CONSENSUS_VALIDATION_H |
||||
|
||||
#include <string> |
||||
|
||||
/** "reject" message codes */ |
||||
static const unsigned char REJECT_MALFORMED = 0x01; |
||||
static const unsigned char REJECT_INVALID = 0x10; |
||||
static const unsigned char REJECT_OBSOLETE = 0x11; |
||||
static const unsigned char REJECT_DUPLICATE = 0x12; |
||||
static const unsigned char REJECT_NONSTANDARD = 0x40; |
||||
static const unsigned char REJECT_DUST = 0x41; |
||||
static const unsigned char REJECT_INSUFFICIENTFEE = 0x42; |
||||
static const unsigned char REJECT_CHECKPOINT = 0x43; |
||||
|
||||
/** Capture information about block/transaction validation */ |
||||
class CValidationState { |
||||
private: |
||||
enum mode_state { |
||||
MODE_VALID, //! everything ok
|
||||
MODE_INVALID, //! network rule violation (DoS value may be set)
|
||||
MODE_ERROR, //! run-time error
|
||||
} mode; |
||||
int nDoS; |
||||
std::string strRejectReason; |
||||
unsigned char chRejectCode; |
||||
bool corruptionPossible; |
||||
public: |
||||
CValidationState() : mode(MODE_VALID), nDoS(0), chRejectCode(0), corruptionPossible(false) {} |
||||
bool DoS(int level, bool ret = false, |
||||
unsigned char chRejectCodeIn=0, std::string strRejectReasonIn="", |
||||
bool corruptionIn=false) { |
||||
chRejectCode = chRejectCodeIn; |
||||
strRejectReason = strRejectReasonIn; |
||||
corruptionPossible = corruptionIn; |
||||
if (mode == MODE_ERROR) |
||||
return ret; |
||||
nDoS += level; |
||||
mode = MODE_INVALID; |
||||
return ret; |
||||
} |
||||
bool Invalid(bool ret = false, |
||||
unsigned char _chRejectCode=0, std::string _strRejectReason="") { |
||||
return DoS(0, ret, _chRejectCode, _strRejectReason); |
||||
} |
||||
bool Error(std::string strRejectReasonIn="") { |
||||
if (mode == MODE_VALID) |
||||
strRejectReason = strRejectReasonIn; |
||||
mode = MODE_ERROR; |
||||
return false; |
||||
} |
||||
bool IsValid() const { |
||||
return mode == MODE_VALID; |
||||
} |
||||
bool IsInvalid() const { |
||||
return mode == MODE_INVALID; |
||||
} |
||||
bool IsError() const { |
||||
return mode == MODE_ERROR; |
||||
} |
||||
bool IsInvalid(int &nDoSOut) const { |
||||
if (IsInvalid()) { |
||||
nDoSOut = nDoS; |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
bool CorruptionPossible() const { |
||||
return corruptionPossible; |
||||
} |
||||
unsigned char GetRejectCode() const { return chRejectCode; } |
||||
std::string GetRejectReason() const { return strRejectReason; } |
||||
}; |
||||
|
||||
#endif // BITCOIN_CONSENSUS_VALIDATION_H
|
Loading…
Reference in new issue