block size

This commit is contained in:
NikVolf 2016-11-15 23:01:45 +03:00
parent dedad2de55
commit a9e0f8e318
2 changed files with 15 additions and 8 deletions

View File

@ -10,6 +10,7 @@ use utils;
const BLOCK_MAX_FUTURE: i64 = 2 * 60 * 60; // 2 hours
const COINBASE_MATURITY: u32 = 100; // 2 hours
const MAX_BLOCK_SIGOPS: usize = 20000;
const MAX_BLOCK_SIZE: usize = 1000000;
pub struct ChainVerifier {
store: Arc<db::Store>,
@ -168,18 +169,22 @@ impl Verify for ChainVerifier {
return Err(Error::MerkleRoot);
}
let size = ::serialization::Serializable::serialized_size(block);
if size >= MAX_BLOCK_SIZE {
return Err(Error::Size(size))
}
// check first transaction is a coinbase transaction
if !block.transactions()[0].is_coinbase() {
return Err(Error::Coinbase)
}
else {
// check that coinbase does not have a signature
let coinbase = &block.transactions()[0];
// is_coinbase() = true above guarantees that there is at least one input
let coinbase_script_len = coinbase.inputs[0].script_sig().len();
if coinbase_script_len < 2 || coinbase_script_len > 100 {
return Err(Error::CoinbaseSignatureLength(coinbase_script_len));
}
// check that coinbase has a valid signature
let coinbase = &block.transactions()[0];
// is_coinbase() = true above guarantees that there is at least one input
let coinbase_script_len = coinbase.inputs[0].script_sig().len();
if coinbase_script_len < 2 || coinbase_script_len > 100 {
return Err(Error::CoinbaseSignatureLength(coinbase_script_len));
}
// verify transactions (except coinbase)

View File

@ -52,6 +52,8 @@ pub enum Error {
MaximumSigops,
/// Coinbase signature is not in the range 2-100
CoinbaseSignatureLength(usize),
/// Block size is invalid
Size(usize),
}
#[derive(Debug, PartialEq)]