count coinbase outputs also

This commit is contained in:
NikVolf 2016-11-15 12:57:58 +03:00
parent b7014f4ea5
commit 584ec20e1f
2 changed files with 13 additions and 7 deletions

View File

@ -174,7 +174,11 @@ impl Verify for ChainVerifier {
}
// verify transactions (except coinbase)
let mut block_sigops = 0;
let mut block_sigops = try!(
utils::transaction_sigops(&block.transactions()[0])
.map_err(|e| Error::Transaction(1, TransactionError::SignatureMallformed(format!("{}", e))))
);
for (idx, transaction) in block.transactions().iter().skip(1).enumerate() {
block_sigops += try!(

View File

@ -57,15 +57,17 @@ pub fn block_reward_satoshi(block_height: u32) -> u64 {
pub fn transaction_sigops(transaction: &chain::Transaction) -> Result<usize, script::Error> {
let mut result = 0usize;
for input in transaction.inputs.iter() {
let input_script: Script = input.script_sig().to_vec().into();
result += try!(input_script.sigop_count());
}
for output in transaction.outputs.iter() {
let output_script: Script = output.script_pubkey.to_vec().into();
// todo: not always allow malformed output?
result += output_script.sigop_count().unwrap_or(1);
result += output_script.sigop_count().unwrap_or(0);
}
if transaction.is_coinbase() { return Ok(result); }
for input in transaction.inputs.iter() {
let input_script: Script = input.script_sig().to_vec().into();
result += try!(input_script.sigop_count());
}
Ok(result)