Permalink
Browse files

Auto merge of #1600 - str4d:1557-consensus-rule-disallow-v0-txns, r=e…

…bfull

Disallow v0 transactions as a consensus rule

Closes #1557
  • Loading branch information...
zkbot
zkbot committed Oct 22, 2016
2 parents 0b38094 + 7ac924c commit f2ba0aaec7c86c2aa52904aa336ffe9162949f49
Showing with 18 additions and 0 deletions.
  1. +2 −0 src/consensus/consensus.h
  2. +10 −0 src/gtest/test_checktransaction.cpp
  3. +6 −0 src/main.cpp
@@ -6,6 +6,8 @@
#ifndef BITCOIN_CONSENSUS_CONSENSUS_H
#define BITCOIN_CONSENSUS_CONSENSUS_H
/** The minimum allowed transaction version (network rule) */
static const int32_t MIN_TX_VERSION = 1;
/** The maximum allowed size for a serialized block, in bytes (network rule) */
static const unsigned int MAX_BLOCK_SIZE = 2000000;
/** The maximum allowed number of signature check operations in a block (network rule) */
@@ -94,6 +94,16 @@ TEST(checktransaction_tests, valid_transaction) {
EXPECT_TRUE(CheckTransactionWithoutProofVerification(tx, state));
}
TEST(checktransaction_tests, BadVersionTooLow) {
CMutableTransaction mtx = GetValidTransaction();
mtx.nVersion = 0;
CTransaction tx(mtx);
MockCValidationState state;
EXPECT_CALL(state, DoS(100, false, REJECT_INVALID, "bad-version-too-low", false)).Times(1);
CheckTransactionWithoutProofVerification(tx, state);
}
TEST(checktransaction_tests, bad_txns_vin_empty) {
CMutableTransaction mtx = GetValidTransaction();
mtx.vjoinsplit.resize(0);
View
@@ -851,6 +851,12 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio
{
// Basic checks that don't depend on any context
// Check transaction version
if (tx.nVersion < MIN_TX_VERSION) {
return state.DoS(100, error("CheckTransaction(): version too low"),
REJECT_INVALID, "bad-version-too-low");
}
// Transactions can contain empty `vin` and `vout` so long as
// `vjoinsplit` is non-empty.
if (tx.vin.empty() && tx.vjoinsplit.empty())

0 comments on commit f2ba0aa

Please sign in to comment.