inconclusive result in transaction verification
This commit is contained in:
parent
543d66ce03
commit
5a20b9fe36
|
@ -34,7 +34,7 @@ impl ChainVerifier {
|
|||
None => {
|
||||
match block.transactions.iter().filter(|t| t.hash() == input.previous_output.hash).nth(0) {
|
||||
Some(ref tx) => tx,
|
||||
None => { return Err(TransactionError::Input(input_index)); },
|
||||
None => { return Err(TransactionError::Inconclusive(input.previous_output.hash.clone())); },
|
||||
}
|
||||
},
|
||||
};
|
||||
|
@ -111,7 +111,7 @@ impl Verify for ChainVerifier {
|
|||
mod tests {
|
||||
|
||||
use super::ChainVerifier;
|
||||
use super::super::{Verify, Chain};
|
||||
use super::super::{Verify, Chain, Error, TransactionError};
|
||||
use db::TestStorage;
|
||||
use test_data;
|
||||
use std::sync::Arc;
|
||||
|
@ -146,4 +146,21 @@ mod tests {
|
|||
assert_eq!(Chain::Main, verifier.verify(&b1).unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unknown_transaction_returns_inconclusive() {
|
||||
let storage = TestStorage::with_blocks(
|
||||
&vec![
|
||||
test_data::block_h169(),
|
||||
]
|
||||
);
|
||||
let b170 = test_data::block_h170();
|
||||
let verifier = ChainVerifier::new(Arc::new(storage));
|
||||
|
||||
let should_be = Err(Error::Transaction(
|
||||
0,
|
||||
TransactionError::Inconclusive("c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704".into())
|
||||
));
|
||||
assert_eq!(should_be, verifier.verify(&b170));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -22,7 +22,9 @@ mod chain_verifier;
|
|||
pub use queue::Queue;
|
||||
pub use chain_verifier::ChainVerifier;
|
||||
|
||||
#[derive(Debug)]
|
||||
use primitives::hash::H256;
|
||||
|
||||
#[derive(Debug, PartialEq)]
|
||||
/// All possible verification errors
|
||||
pub enum Error {
|
||||
/// has an equal duplicate in the chain
|
||||
|
@ -43,7 +45,7 @@ pub enum Error {
|
|||
MerkleRoot,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
#[derive(Debug, PartialEq)]
|
||||
/// Possible transactions verification errors
|
||||
pub enum TransactionError {
|
||||
/// Not found corresponding output for transaction input
|
||||
|
@ -52,6 +54,8 @@ pub enum TransactionError {
|
|||
Maturity,
|
||||
/// Signature invalid for given input
|
||||
Signature(usize),
|
||||
/// Inconclusive (unknown parent transaction)
|
||||
Inconclusive(H256),
|
||||
}
|
||||
|
||||
#[derive(PartialEq, Debug)]
|
||||
|
|
Loading…
Reference in New Issue