transaction verification

This commit is contained in:
NikVolf 2016-10-24 02:34:32 +03:00
parent 1176c62628
commit d1c83bc724
1 changed files with 21 additions and 20 deletions

View File

@ -19,7 +19,13 @@ impl ChainVerifier {
} }
fn verify_transaction(&self, transaction: &chain::Transaction) -> Result<(), TransactionError> { fn verify_transaction(&self, transaction: &chain::Transaction) -> Result<(), TransactionError> {
//use script::{TransactionInputSigner, TransactionSignatureChecker, VerificationFlags, verify_script}; use script::{
TransactionInputSigner,
TransactionSignatureChecker,
VerificationFlags,
Script,
verify_script,
};
for (input_index, input) in transaction.inputs().iter().enumerate() { for (input_index, input) in transaction.inputs().iter().enumerate() {
let parent_transaction = match self.store.transaction(&input.previous_output.hash) { let parent_transaction = match self.store.transaction(&input.previous_output.hash) {
@ -30,27 +36,22 @@ impl ChainVerifier {
return Err(TransactionError::Input(input_index)); return Err(TransactionError::Input(input_index));
} }
// signature verification // signature verification
let signer: TransactionInputSigner = transaction.clone().into();
let ref paired_output = parent_transaction.outputs[input.previous_output.index as usize];
let checker = TransactionSignatureChecker {
signer: signer,
input_index: input_index,
};
let input: Script = input.script_sig().to_vec().into();
let output: Script = paired_output.script_pubkey.to_vec().into();
let flags = VerificationFlags::default().verify_p2sh(true);
// let signer: TransactionInputSigner = transaction.clone().into(); if let Err(e) = verify_script(&input, &output, &flags, &checker) {
// let paired_output = parent_transaction.outputs[input.previous_output.index as usize]; println!("transaction signature verification failure: {:?}", e);
// let checker = TransactionSignatureChecker { // todo: log error here
// signer: signer, return Err(TransactionError::Signature(input_index))
// input_index: input_index, }
// };
// let input: Script = input.script_sig().into();
// let output: Script = paired_output.script_pubkey.into();
// let flags = VerificationFlags::default().verify_p2sh(true);
//
// if !verify_script(&input, &output, &flags, &checker).unwrap_or(|e| {
// // todo: log error here
// println!("transaction signature verification failure: {:?}", e);
// false
// })
// {
// return Err(TransactionError::Signature(input_index))
// }
} }
Ok(()) Ok(())