From 69e613bfb0f777c8dcd2576fe1c2541ee7a17208 Mon Sep 17 00:00:00 2001 From: Johnson Lau Date: Sun, 4 Dec 2016 03:19:42 +0800 Subject: [PATCH] HARDFORK: implement block resources limitations --- src/validation.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/validation.cpp b/src/validation.cpp index c457accbee5b8..e565c978ded3d 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -2992,6 +2992,16 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, const Co } } + if (nHeight >= HARDFORK_HEIGHT) { + if ((GetBlockWeight(block) > (MAX_BLOCK_WEIGHT * 2) || GetBlockWeight(block) > block.nTxsWeight)) + return state.DoS(100, false, REJECT_INVALID, "bad-blk-weight", false, strprintf("%s : weight limit failed", __func__)); + if (::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION) > block.nTxsBytes) + return state.DoS(100, false, REJECT_INVALID, "bad-blk-size", false, strprintf("%s : size limit failed", __func__)); + if (block.vtx.size() > block.nTxsCount) + return state.DoS(100, false, REJECT_INVALID, "bad-txs-count", false, strprintf("%s : txs count failed", __func__)); + return true; + } + // After the coinbase witness nonce and commitment are verified, // we can check if the block weight passes (before we've checked the // coinbase witness, it would be possible for the weight to be too