Add verify with flags
This commit is contained in:
parent
8231e25292
commit
3aaa5d6846
|
@ -449,13 +449,20 @@ impl Script {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature="bitcoinconsensus")]
|
#[cfg(feature="bitcoinconsensus")]
|
||||||
/// verify spend of an input script
|
/// Shorthand for [Self::verify_with_flags] with flag [bitcoinconsensus::VERIFY_ALL]
|
||||||
/// # Parameters
|
|
||||||
/// * index - the input index in spending which is spending this transaction
|
|
||||||
/// * amount - the amount this script guards
|
|
||||||
/// * spending - the transaction that attempts to spend the output holding this script
|
|
||||||
pub fn verify (&self, index: usize, amount: u64, spending: &[u8]) -> Result<(), Error> {
|
pub fn verify (&self, index: usize, amount: u64, spending: &[u8]) -> Result<(), Error> {
|
||||||
Ok(bitcoinconsensus::verify (&self.0[..], amount, spending, index)?)
|
self.verify_with_flags(index, amount, spending, ::bitcoinconsensus::VERIFY_ALL)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature="bitcoinconsensus")]
|
||||||
|
/// Verify spend of an input script
|
||||||
|
/// # Parameters
|
||||||
|
/// * `index` - the input index in spending which is spending this transaction
|
||||||
|
/// * `amount` - the amount this script guards
|
||||||
|
/// * `spending` - the transaction that attempts to spend the output holding this script
|
||||||
|
/// * `flags` - verification flags, see [bitcoinconsensus::VERIFY_ALL] and similar
|
||||||
|
pub fn verify_with_flags<F: Into<u32>>(&self, index: usize, amount: u64, spending: &[u8], flags: F) -> Result<(), Error> {
|
||||||
|
Ok(bitcoinconsensus::verify_with_flags (&self.0[..], amount, spending, index, flags.into())?)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Write the assembly decoding of the script bytes to the formatter.
|
/// Write the assembly decoding of the script bytes to the formatter.
|
||||||
|
|
|
@ -462,15 +462,22 @@ impl Transaction {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature="bitcoinconsensus")]
|
||||||
|
/// Shorthand for [Self::verify_with_flags] with flag [bitcoinconsensus::VERIFY_ALL]
|
||||||
|
pub fn verify<S>(&self, spent: S) -> Result<(), script::Error>
|
||||||
|
where S: FnMut(&OutPoint) -> Option<TxOut> {
|
||||||
|
self.verify_with_flags(spent, ::bitcoinconsensus::VERIFY_ALL)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature="bitcoinconsensus")]
|
#[cfg(feature="bitcoinconsensus")]
|
||||||
/// Verify that this transaction is able to spend its inputs
|
/// Verify that this transaction is able to spend its inputs
|
||||||
/// The lambda spent should not return the same TxOut twice!
|
/// The lambda spent should not return the same TxOut twice!
|
||||||
pub fn verify<S>(&self, mut spent: S) -> Result<(), script::Error>
|
pub fn verify_with_flags<S, F>(&self, mut spent: S, flags: F) -> Result<(), script::Error>
|
||||||
where S: FnMut(&OutPoint) -> Option<TxOut> {
|
where S: FnMut(&OutPoint) -> Option<TxOut>, F : Into<u32> + Copy {
|
||||||
let tx = encode::serialize(&*self);
|
let tx = encode::serialize(&*self);
|
||||||
for (idx, input) in self.input.iter().enumerate() {
|
for (idx, input) in self.input.iter().enumerate() {
|
||||||
if let Some(output) = spent(&input.previous_output) {
|
if let Some(output) = spent(&input.previous_output) {
|
||||||
output.script_pubkey.verify(idx, output.value, tx.as_slice())?;
|
output.script_pubkey.verify_with_flags(idx, output.value, tx.as_slice(), flags)?;
|
||||||
} else {
|
} else {
|
||||||
return Err(script::Error::UnknownSpentOutput(input.previous_output.clone()));
|
return Err(script::Error::UnknownSpentOutput(input.previous_output.clone()));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue