Minor cleanup of utxoset input checking

This commit is contained in:
Andrew Poelstra 2014-08-31 16:35:30 -07:00
parent d880bd1ccc
commit 1515f68748
1 changed files with 11 additions and 16 deletions

View File

@ -253,28 +253,23 @@ impl UtxoSet {
}
}
let mut skipped_genesis = false;
for tx in block.txdata.iter() {
for tx in block.txdata.iter().skip(1) {
let txid = tx.bitcoin_hash();
// Put the removed utxos into the stxo cache, in case we need to rewind
if skipped_genesis {
self.spent_txos.get_mut(spent_idx).reserve_additional(tx.input.len());
for (n, input) in tx.input.iter().enumerate() {
let taken = self.take_utxo(input.prev_hash, input.prev_index);
match taken {
Some(txo) => { self.spent_txos.get_mut(spent_idx).push(((txid, n as u32), txo)); }
None => {
if validation >= TxoValidation {
self.rewind(block);
return Err(InvalidTx(txid,
InputNotFound(input.prev_hash, input.prev_index)));
}
self.spent_txos.get_mut(spent_idx).reserve_additional(tx.input.len());
for (n, input) in tx.input.iter().enumerate() {
let taken = self.take_utxo(input.prev_hash, input.prev_index);
match taken {
Some(txo) => { self.spent_txos.get_mut(spent_idx).push(((txid, n as u32), txo)); }
None => {
if validation >= TxoValidation {
self.rewind(block);
return Err(InvalidTx(txid,
InputNotFound(input.prev_hash, input.prev_index)));
}
}
}
}
skipped_genesis = true;
}
// If we made it here, success!
Ok(())