aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaul Kfir <shaul.kfir@gmail.com>2015-03-16 21:36:43 -0400
committerShaul Kfir <shaul.kfir@gmail.com>2015-06-30 15:59:11 -0400
commita651403e09ccc9ac0a3322e880d6543dd51a14bd (patch)
treee138302775a76f9667a56fa5ea0e38e7fa1e2f89
parentda77a6f7611f71443914e1c71df1e52468cf507d (diff)
Add absurdly high fee message to validation state (for RPC propagation)
-rw-r--r--src/consensus/validation.h8
-rw-r--r--src/main.cpp7
-rw-r--r--src/main.h3
3 files changed, 11 insertions, 7 deletions
diff --git a/src/consensus/validation.h b/src/consensus/validation.h
index a97d983a31..719e090a42 100644
--- a/src/consensus/validation.h
+++ b/src/consensus/validation.h
@@ -28,12 +28,12 @@ private:
} mode;
int nDoS;
std::string strRejectReason;
- unsigned char chRejectCode;
+ unsigned int 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="",
+ unsigned int chRejectCodeIn=0, std::string strRejectReasonIn="",
bool corruptionIn=false) {
chRejectCode = chRejectCodeIn;
strRejectReason = strRejectReasonIn;
@@ -45,7 +45,7 @@ public:
return ret;
}
bool Invalid(bool ret = false,
- unsigned char _chRejectCode=0, std::string _strRejectReason="") {
+ unsigned int _chRejectCode=0, std::string _strRejectReason="") {
return DoS(0, ret, _chRejectCode, _strRejectReason);
}
bool Error(const std::string& strRejectReasonIn) {
@@ -73,7 +73,7 @@ public:
bool CorruptionPossible() const {
return corruptionPossible;
}
- unsigned char GetRejectCode() const { return chRejectCode; }
+ unsigned int GetRejectCode() const { return chRejectCode; }
std::string GetRejectReason() const { return strRejectReason; }
};
diff --git a/src/main.cpp b/src/main.cpp
index 6c4cfe75aa..f67f1fd0d7 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1031,9 +1031,10 @@ bool AcceptToMemoryPool(CTxMemPool& pool, CValidationState &state, const CTransa
}
if (fRejectAbsurdFee && nFees > ::minRelayTxFee.GetFee(nSize) * 10000)
- return error("AcceptToMemoryPool: absurdly high fees %s, %d > %d",
- hash.ToString(),
- nFees, ::minRelayTxFee.GetFee(nSize) * 10000);
+ return state.Invalid(error("AcceptToMemoryPool: absurdly high fees %s, %d > %d",
+ hash.ToString(),
+ nFees, ::minRelayTxFee.GetFee(nSize) * 10000),
+ REJECT_HIGHFEE, "absurdly-high-fee");
// Check against previous transactions
// This is done last to help prevent CPU exhaustion denial-of-service attacks.
diff --git a/src/main.h b/src/main.h
index 4e2efaada0..e11d5c857d 100644
--- a/src/main.h
+++ b/src/main.h
@@ -497,4 +497,7 @@ extern CBlockTreeDB *pblocktree;
*/
int GetSpendHeight(const CCoinsViewCache& inputs);
+/** local "reject" message codes for RPC which can not be triggered by p2p trasactions */
+static const unsigned int REJECT_HIGHFEE = 0x100;
+
#endif // BITCOIN_MAIN_H