//! This module does not include tests that require support for
//! - `CHECKSEQUENCEVERIFY``,
//! - `DERSIG`,
//! - `MINIMALIF`,
//! - `NULLFAIL`, or
//! - `WITNESS`.
use alloc::vec::Vec;
use core::iter;
use bounded_vec::EmptyBoundedVec;
use hex::{FromHex, FromHexError};
use crate::{
interpreter, num,
op::*,
opcode::{self, Bad::*, Disabled::*, PushValue},
script, signature, Opcode,
};
/// An [`script::Error`] annotated with a [`script::ComponentType`].
//
// TODO: Once C++ support is removed, the `Option` can go away.
pub type AnnError = (Option<script::ComponentType>, script::Error);
/// A shorthand syntax for writing possibly-incorrect scripts.
#[derive(Debug)]
enum Entry {
/// An Opcode
O(Opcode),
B(opcode::Bad),
D(opcode::Disabled),
/// A byte sequence encoded as a hex string
H(&'static str),
/// A PushValue encoded as an ASCII string
A(&'static str),
/// A PushValue encoded as a number
N(i64),
/// A PushValue encoded as a signature (R component, S component, hash type)
Sig(&'static str, &'static str, u8),
}
impl Entry {
fn pb_from_lv(lv: opcode::push_value::LargeValue) -> opcode::PossiblyBad {
opcode::PossiblyBad::from(Opcode::from(PushValue::from(lv)))
}
/// Constructs a `LargeValue` that may be a non-minimal encoding of a `SmallValue`.
fn lv_from_slice(v: &[u8]) -> opcode::PossiblyBad {
Self::pb_from_lv(
opcode::push_value::LargeValue::from_slice(v).expect("slice fits into push value"),
)
}
/// Encodes a byte slice as a the snippet of Zcash script code (a push value opcode possibly
/// followed by additional data) that would push those bytes onto the stack.
fn val_to_pv(v: &[u8]) -> Vec<u8> {
(&PushValue::from_slice(v).expect("slice fits into push value")).into()
}
fn serialize(&self) -> Result<Vec<u8>, FromHexError> {
match self {
Entry::O(opcode) => Ok(opcode.into()),
Entry::B(bad) => Ok(vec![bad.encode()]),
Entry::D(disabled) => Ok(vec![disabled.encode()]),
Entry::H(bytes) => <Vec<u8>>::from_hex(*bytes),
Entry::A(string) => Ok(Self::val_to_pv(string.as_bytes())),
Entry::N(num) => Ok(Self::val_to_pv(&num::serialize(*num))),
Entry::Sig(r_hex, s_hex, hash_type) => {
let r = <Vec<u8>>::from_hex(*r_hex)?;
let r_len = u8::try_from(r.len()).expect("signatures have single-byte lengths");
let s = <Vec<u8>>::from_hex(*s_hex)?;
let s_len = u8::try_from(s.len()).expect("signatures have single-byte lengths");
Ok(Self::val_to_pv(
&[0x30, 4 + r_len + s_len, 0x02, r_len]
.into_iter()
.chain(r)
.chain([0x02, s_len])
.chain(s)
.chain(iter::once(*hash_type))
.collect::<Vec<_>>(),
))
}
}
}
}
/// This holds an expected result, because some results are difficult to construct manually.
#[derive(Clone, Debug)]
pub enum ResultCmp {
/// The exact result that should be returned.
Original(Result<bool, (Option<script::ComponentType>, script::Error)>),
/// The normalized form of an error result, for errors that are difficult to construct manually.
/// This discards the info that the C++ implementation can’t contain, which includes any
/// complicated error context.
Normalized(script::Error),
}
impl ResultCmp {
/// Return the normalized form of the expected result.
pub fn normalized(self) -> Result<bool, script::Error> {
match self {
ResultCmp::Original(res) => res.map_err(|(_, e)| e.normalize()),
ResultCmp::Normalized(err) => Err(err),
}
}
}
/// A single test case.
///
/// __NB__: This uses separate `script_sig` and `script_pubkey` fields instead of a representation
/// like `script::Raw` because it allows us to have more informative error reporting than .
#[derive(Debug)]
pub struct TestVector {
script_sig: &'static [Entry],
script_pubkey: &'static [Entry],
flags: interpreter::Flags,
/// The expected result of the test.
pub result: ResultCmp,
/// The sigop count for the pubkey of this script. This doesn’t use `accurate` counting, because
/// that isn’t exposed by the C++ interface.
pub sigop_count: u32,
}
const fn ok(r: bool) -> ResultCmp {
ResultCmp::Original(Ok(r))
}
const fn err(t: script::ComponentType, e: script::Error) -> ResultCmp {
ResultCmp::Original(Err((Some(t), e)))
}
const fn normalized_err(e: script::Error) -> ResultCmp {
ResultCmp::Normalized(e)
}
fn compare_results(
actual: Result<bool, (Option<script::ComponentType>, script::Error)>,
expected: ResultCmp,
) -> bool {
match expected {
ResultCmp::Original(original) => actual == original,
ResultCmp::Normalized(normalized) => {
actual.map_err(|(_, e)| e.normalize()) == Err(normalized)
}
}
}
impl TestVector {
/// A successful run is uninteresting, but a failure returns the actual `Result` in `Err`.
pub fn run(
&self,
interpreter_fn: &dyn Fn(&script::Raw, interpreter::Flags) -> Result<bool, AnnError>,
sigop_count_fn: &dyn Fn(&script::Code) -> u32,
) -> Result<(), (Result<bool, AnnError>, u32)> {
match (
self.script_sig
.iter()
.map(Entry::serialize)
.collect::<Result<Vec<Vec<u8>>, FromHexError>>()
.map(|vs| vs.concat()),
self.script_pubkey
.iter()
.map(Entry::serialize)
.collect::<Result<Vec<Vec<u8>>, FromHexError>>()
.map(|vs| vs.concat()),
) {
(Ok(sig), Ok(pubkey)) => {
let res = interpreter_fn(
&script::Raw::from_raw_parts(sig, pubkey.clone()),
self.flags,
);
let count = sigop_count_fn(&script::Code(pubkey));
if compare_results(res.clone(), self.result.clone()) && count == self.sigop_count {
Ok(())
} else {
Err((res, count))
}
}
(s, p) => panic!("{:?} has a bad hex value: {:?}", self, s.and(p)),
}
}
}
const DEFAULT_FLAGS: interpreter::Flags =
interpreter::Flags::P2SH.union(interpreter::Flags::StrictEnc);
const EMPTY_FLAGS: interpreter::Flags = interpreter::Flags::empty();
use Entry::*;
/// The entire test suite.
///
/// Each case is evaluated as if there was a crediting coinbase transaction with two 0 pushes as
/// scriptSig, and one output of 0 satoshi and given scriptPubKey, followed by a spending
/// transaction which spends this output as only input (and correct prevout hash), using the given
/// scriptSig. All nLockTimes are 0, all nSequences are max.
pub fn test_vectors() -> Vec<TestVector> {
vec![
// Test the test: we should have an empty stack after scriptSig evaluation
TestVector {
script_sig: &[],
script_pubkey: &[O(DEPTH), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Similarly whitespace around and between symbols
TestVector {
script_sig: &[N(1), N(2)],
script_pubkey: &[N(2), O(EQUALVERIFY), N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// all bytes are significant, not only the last one
TestVector {
script_sig: &[H("02"), H("01"), H("00")],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// equals zero when cast to Int64
TestVector {
script_sig: &[H("09"), H("00000000"), H("00000000"), H("10")],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// push 1 byte
TestVector {
script_sig: &[H("01"), H("0b")],
script_pubkey: &[N(11), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("417a")],
script_pubkey: &[A("Az"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// push 75 bytes
TestVector {
script_sig: &[
H("4b"),
H(
"417a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a7a",
),
],
script_pubkey: &[
A("Azzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x4c is OP_PUSHDATA1
TestVector {
script_sig: &[H("4c"), H("01"), H("07")],
script_pubkey: &[N(7), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x4d is OP_PUSHDATA2
TestVector {
script_sig: &[H("4d"), H("0100"), H("08")],
script_pubkey: &[N(8), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x4e is OP_PUSHDATA4
TestVector {
script_sig: &[H("4e"), H("01000000"), H("09")],
script_pubkey: &[N(9), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("4c"), H("00")],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("4d"), H("0000")],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("4e"), H("00000000")],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("4f"), N(1000), O(ADD)],
script_pubkey: &[N(999), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x50 is reserved (ok if not executed)
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("50"), O(ENDIF), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// H("51"), through H("60"), push 1 through 16 onto stack
TestVector {
script_sig: &[H("51")],
script_pubkey: &[H("5f"), O(ADD), H("60"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// VER non-functional (ok if not executed)
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), B(OP_VER), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// RESERVED ok in un-executed IF
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(IF),
B(OP_RESERVED),
B(OP_RESERVED1),
B(OP_RESERVED2),
O(ELSE),
N(1),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP), O(IF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP), O(IF), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(IF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(IF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[
O(IF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[
O(IF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(NOTIF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(NOTIF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[
O(NOTIF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[
O(NOTIF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Multiple ELSEs are valid and executed inverts on each ELSE encountered
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), N(0), O(ELSE), N(1), O(ELSE), N(0), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1), O(ELSE), N(0), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(ELSE), N(0), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(IF),
N(1),
O(ELSE),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ADD),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A(""), N(1)],
script_pubkey: &[
O(IF),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ENDIF),
H("14"),
H("68ca4fec736264c13b859bac43d5173df6871682"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Multiple ELSEs are valid and execution inverts on each ELSE encountered
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOTIF), N(0), O(ELSE), N(1), O(ELSE), N(0), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOTIF), N(1), O(ELSE), N(0), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOTIF), O(ELSE), N(0), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(NOTIF),
N(1),
O(ELSE),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ADD),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A(""), N(0)],
script_pubkey: &[
O(NOTIF),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ELSE),
O(ELSE),
O(SHA1),
O(ENDIF),
H("14"),
H("68ca4fec736264c13b859bac43d5173df6871682"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Nested ELSE ELSE
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(IF),
N(1),
O(IF),
O(RETURN),
O(ELSE),
O(RETURN),
O(ELSE),
O(RETURN),
O(ENDIF),
O(ELSE),
N(1),
O(IF),
N(1),
O(ELSE),
O(RETURN),
O(ELSE),
N(1),
O(ENDIF),
O(ELSE),
O(RETURN),
O(ENDIF),
O(ADD),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(NOTIF),
N(0),
O(NOTIF),
O(RETURN),
O(ELSE),
O(RETURN),
O(ELSE),
O(RETURN),
O(ENDIF),
O(ELSE),
N(0),
O(NOTIF),
N(1),
O(ELSE),
O(RETURN),
O(ELSE),
N(1),
O(ENDIF),
O(ELSE),
O(RETURN),
O(ENDIF),
O(ADD),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// RETURN only works if executed
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), O(RETURN), O(ENDIF), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(VERIFY)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// values >4 bytes can be cast to boolean
TestVector {
script_sig: &[N(1), H("05"), H("01"), H("00"), H("00"), H("00"), H("00")],
script_pubkey: &[O(VERIFY)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// negative 0 is false
TestVector {
script_sig: &[N(1), H("01"), H("80")],
script_pubkey: &[O(IF), N(0), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(10), N(0), N(11), O(TOALTSTACK), O(DROP), O(FROMALTSTACK)],
script_pubkey: &[O(ADD), N(21), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("gavin_was_here"), O(TOALTSTACK), N(11), O(FROMALTSTACK)],
script_pubkey: &[A("gavin_was_here"), O(EQUALVERIFY), N(11), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(IFDUP)],
script_pubkey: &[O(DEPTH), N(1), O(EQUALVERIFY), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(IFDUP)],
script_pubkey: &[
O(DEPTH),
N(2),
O(EQUALVERIFY),
N(1),
O(EQUALVERIFY),
N(1),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// IFDUP dups non ints
TestVector {
script_sig: &[H("05"), H("0100000000"), O(IFDUP)],
script_pubkey: &[
O(DEPTH),
N(2),
O(EQUALVERIFY),
H("05"),
H("0100000000"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(DROP)],
script_pubkey: &[O(DEPTH), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(DUP), N(1), O(ADD), N(1), O(EQUALVERIFY), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(NIP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(OVER), O(DEPTH), N(3), O(EQUALVERIFY)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(0),
O(PICK),
N(20),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(1),
O(PICK),
N(21),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(2),
O(PICK),
N(22),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(0),
O(ROLL),
N(20),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(1),
O(ROLL),
N(21),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[
N(2),
O(ROLL),
N(22),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[O(ROT), N(22), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[O(ROT), O(DROP), N(20), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[O(ROT), O(DROP), O(DROP), N(21), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[O(ROT), O(ROT), N(21), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(22), N(21), N(20)],
script_pubkey: &[O(ROT), O(ROT), O(ROT), N(20), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), N(24), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(DROP), N(25), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2DROP), N(20), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2DROP), O(DROP), N(21), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2DROP), O(_2DROP), N(22), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2DROP), O(_2DROP), O(DROP), N(23), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2ROT), N(22), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(25), N(24), N(23), N(22), N(21), N(20)],
script_pubkey: &[O(_2ROT), O(_2ROT), O(_2ROT), N(20), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(SWAP), N(1), O(EQUALVERIFY), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(TUCK), O(DEPTH), N(3), O(EQUALVERIFY), O(SWAP), O(_2DROP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(13), N(14)],
script_pubkey: &[O(_2DUP), O(ROT), O(EQUALVERIFY), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0), N(1), N(2)],
script_pubkey: &[
O(_3DUP),
O(DEPTH),
N(7),
O(EQUALVERIFY),
O(ADD),
O(ADD),
N(3),
O(EQUALVERIFY),
O(_2DROP),
N(0),
O(EQUALVERIFY),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(2), N(3), N(5)],
script_pubkey: &[
O(_2OVER),
O(ADD),
O(ADD),
N(8),
O(EQUALVERIFY),
O(ADD),
O(ADD),
N(6),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(3), N(5), N(7)],
script_pubkey: &[
O(_2SWAP),
O(ADD),
N(4),
O(EQUALVERIFY),
O(ADD),
N(12),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(SIZE), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(SIZE), N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(127)],
script_pubkey: &[O(SIZE), N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(128)],
script_pubkey: &[O(SIZE), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(32767)],
script_pubkey: &[O(SIZE), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(32768)],
script_pubkey: &[O(SIZE), N(3), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(8388607)],
script_pubkey: &[O(SIZE), N(3), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(8388608)],
script_pubkey: &[O(SIZE), N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647)],
script_pubkey: &[O(SIZE), N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483648)],
script_pubkey: &[O(SIZE), N(5), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("05ffffffff7f")],
script_pubkey: &[O(SIZE), N(5), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("06000000008000")],
script_pubkey: &[O(SIZE), N(6), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("08ffffffffffffff7f")],
script_pubkey: &[O(SIZE), N(8), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1)],
script_pubkey: &[O(SIZE), N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-127)],
script_pubkey: &[O(SIZE), N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-128)],
script_pubkey: &[O(SIZE), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-32767)],
script_pubkey: &[O(SIZE), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-32768)],
script_pubkey: &[O(SIZE), N(3), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-8388607)],
script_pubkey: &[O(SIZE), N(3), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-8388608)],
script_pubkey: &[O(SIZE), N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483647)],
script_pubkey: &[O(SIZE), N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483648)],
script_pubkey: &[O(SIZE), N(5), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("05ffffffffff")],
script_pubkey: &[O(SIZE), N(5), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("06000000008080")],
script_pubkey: &[O(SIZE), N(6), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("08ffffffffffffffff")],
script_pubkey: &[O(SIZE), N(8), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[O(SIZE), N(26), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// SIZE does not consume argument
TestVector {
script_sig: &[N(42)],
script_pubkey: &[O(SIZE), N(1), O(EQUALVERIFY), N(42), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2), N(-2), O(ADD)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647), N(-2147483647), O(ADD)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(-1), O(ADD)],
script_pubkey: &[N(-2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), O(ADD)],
script_pubkey: &[N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(_1ADD)],
script_pubkey: &[N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(111), O(_1SUB)],
script_pubkey: &[N(110), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(111), N(1), O(ADD), N(12), O(SUB)],
script_pubkey: &[N(100), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(ABS)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(16), O(ABS)],
script_pubkey: &[N(16), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-16), O(ABS)],
script_pubkey: &[N(-16), O(NEGATE), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(NOT)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(NOT)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), O(NOT)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(_0NOTEQUAL)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(_0NOTEQUAL)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(111), O(_0NOTEQUAL)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-111), O(_0NOTEQUAL)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), O(BOOLAND)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), O(BOOLAND)],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), O(BOOLAND)],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), O(BOOLAND)],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(16), N(17), O(BOOLAND)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), O(BOOLOR)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), O(BOOLOR)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), O(BOOLOR)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), O(BOOLOR)],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// negative-0 negative-0 BOOLOR
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[O(DUP), O(BOOLOR)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// non-minimal-0 non-minimal-0 BOOLOR
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[O(DUP), O(BOOLOR)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// -1 -1 BOOLOR
TestVector {
script_sig: &[H("01"), H("81")],
script_pubkey: &[O(DUP), O(BOOLOR)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// negative-0 negative-0 BOOLAND
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[O(DUP), O(BOOLAND)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// non-minimal-0 non-minimal-0 BOOLAND
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[O(DUP), O(BOOLAND)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// -1 -1 BOOLAND
TestVector {
script_sig: &[H("01"), H("81")],
script_pubkey: &[O(DUP), O(BOOLAND)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// non-minimal-0 NOT
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// negative-0 NOT
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// negative 1 NOT
TestVector {
script_sig: &[H("01"), H("81")],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// -0 0 NUMEQUAL
TestVector {
script_sig: &[H("01"), H("80"), N(0)],
script_pubkey: &[O(NUMEQUAL)],
flags: interpreter::Flags::P2SH,
result: ok(true),
sigop_count: 0,
},
// non-minimal-0 0 NUMEQUAL
TestVector {
script_sig: &[H("01"), H("00"), N(0)],
script_pubkey: &[O(NUMEQUAL)],
flags: interpreter::Flags::P2SH,
result: ok(true),
sigop_count: 0,
},
// non-minimal-0 0 NUMEQUAL
TestVector {
script_sig: &[H("02"), H("00"), H("00"), N(0)],
script_pubkey: &[O(NUMEQUAL)],
flags: interpreter::Flags::P2SH,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(16), N(17), O(BOOLOR)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10), N(1), O(ADD)],
script_pubkey: &[O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10), N(1), O(ADD)],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10), N(1), O(ADD)],
script_pubkey: &[O(NUMNOTEQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(111), N(10), N(1), O(ADD)],
script_pubkey: &[O(NUMNOTEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10)],
script_pubkey: &[O(LESSTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(4), N(4)],
script_pubkey: &[O(LESSTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(10), N(11)],
script_pubkey: &[O(LESSTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(11)],
script_pubkey: &[O(LESSTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(-10)],
script_pubkey: &[O(LESSTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10)],
script_pubkey: &[O(GREATERTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(4), N(4)],
script_pubkey: &[O(GREATERTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(10), N(11)],
script_pubkey: &[O(GREATERTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(11)],
script_pubkey: &[O(GREATERTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(-10)],
script_pubkey: &[O(GREATERTHAN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10)],
script_pubkey: &[O(LESSTHANOREQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(4), N(4)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(10), N(11)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(11)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(-10)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(10)],
script_pubkey: &[O(GREATERTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(4), N(4)],
script_pubkey: &[O(GREATERTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(10), N(11)],
script_pubkey: &[O(GREATERTHANOREQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(11)],
script_pubkey: &[O(GREATERTHANOREQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-11), N(-10)],
script_pubkey: &[O(GREATERTHANOREQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), O(MIN)],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), O(MIN)],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0), O(MIN)],
script_pubkey: &[N(-1), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(-2147483647), O(MIN)],
script_pubkey: &[N(-2147483647), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647), N(0), O(MAX)],
script_pubkey: &[N(2147483647), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(100), O(MAX)],
script_pubkey: &[N(100), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-100), N(0), O(MAX)],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(-2147483647), O(MAX)],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), N(1)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), N(1)],
script_pubkey: &[O(WITHIN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(-2147483647), N(2147483647)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(-100), N(100)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(-100), N(100)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483647), N(-100), N(100)],
script_pubkey: &[O(WITHIN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647), N(-100), N(100)],
script_pubkey: &[O(WITHIN), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647), N(2147483647), O(SUB)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// >32 bit EQUAL is valid
TestVector {
script_sig: &[N(2147483647), O(DUP), O(ADD)],
script_pubkey: &[N(4294967294), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647), O(NEGATE), O(DUP), O(ADD)],
script_pubkey: &[N(-4294967294), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(RIPEMD160),
H("14"),
H("9c1185a5c5e9fc54612808977ee8f548b2258d31"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("a")],
script_pubkey: &[
O(RIPEMD160),
H("14"),
H("0bdc9d2d256b3ee9daae347be6f4dc835a467ffe"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[
O(RIPEMD160),
H("14"),
H("f71c27109c692c1b56bbdceb5b9d2865b3708dbc"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(SHA1),
H("14"),
H("da39a3ee5e6b4b0d3255bfef95601890afd80709"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("a")],
script_pubkey: &[
O(SHA1),
H("14"),
H("86f7e437faa5a7fce15d1ddcb9eaeaea377667b8"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[
O(SHA1),
H("14"),
H("32d10c7b8cf96570ca04ce37f2a19d84240d3a89"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(SHA256),
H("20"),
H("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("a")],
script_pubkey: &[
O(SHA256),
H("20"),
H("ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[
O(SHA256),
H("20"),
H("71c480df93d6ae2f1efad1447c66c9525e316218cf51fc8d9ed832f2daf18b73"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(DUP),
O(HASH160),
O(SWAP),
O(SHA256),
O(RIPEMD160),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[O(DUP), O(HASH256), O(SWAP), O(SHA256), O(SHA256), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(NOP),
O(HASH160),
H("14"),
H("b472a266d0bd89c13706a4132ccfb16f7c3b9fcb"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("a")],
script_pubkey: &[
O(HASH160),
O(NOP),
H("14"),
H("994355199e516ff76c4fa4aab39337b9d84cf12b"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[
O(HASH160),
H("4c"),
H("14"),
H("c286a1af0947f58d1ad787385b1c2c4a976f9e71"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("")],
script_pubkey: &[
O(HASH256),
H("20"),
H("5df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c9456"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("a")],
script_pubkey: &[
O(HASH256),
H("20"),
H("bf5d3affb73efd2ec6c36ad3112dd933efed63c4e1cbffcfa88e2759c144f2d8"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[A("abcdefghijklmnopqrstuvwxyz")],
script_pubkey: &[
O(HASH256),
H("4c"),
H("20"),
H("ca139bc10c2f660da42666f72e89a225936fc60f193c161124a672050c434671"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(NOP1),
O(CHECKLOCKTIMEVERIFY),
O(NOP3),
O(NOP4),
O(NOP5),
O(NOP6),
O(NOP7),
O(NOP8),
O(NOP9),
O(NOP10),
N(1),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[
A("NOP_1_to_10"),
O(NOP1),
O(CHECKLOCKTIMEVERIFY),
O(NOP3),
O(NOP4),
O(NOP5),
O(NOP6),
O(NOP7),
O(NOP8),
O(NOP9),
O(NOP10),
],
script_pubkey: &[A("NOP_1_to_10"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Discourage NOPx flag allows OP_NOP
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP)],
flags: interpreter::Flags::P2SH
.union(interpreter::Flags::StrictEnc)
.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: ok(true),
sigop_count: 0,
},
// Discouraged NOPs are allowed if not executed
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), O(NOP10), O(ENDIF), N(1)],
flags: interpreter::Flags::P2SH
.union(interpreter::Flags::StrictEnc)
.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: ok(true),
sigop_count: 0,
},
// opcodes above MAX_OPCODE invalid if executed
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ba"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("bb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("bc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("bd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("be"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("bf"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("c9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ca"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("cb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("cc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("cd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ce"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("cf"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("d9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("da"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("db"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("dc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("dd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("de"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("df"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("e9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ea"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("eb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ec"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ed"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ee"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ef"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("f9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("fa"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("fb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("fc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("fd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("fe"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), H("ff"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 520 byte push
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 201 opcodes executed. H("61"), is NOP
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H(
"616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 1,000 stack size (0x6f is 3DUP)
TestVector {
script_sig: &[
N(1),
N(2),
N(3),
N(4),
N(5),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
script_pubkey: &[
N(1),
N(2),
N(3),
N(4),
N(5),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 1,000 stack size (altstack cleared between scriptSig/scriptPubKey)
TestVector {
script_sig: &[
N(1),
O(TOALTSTACK),
N(2),
O(TOALTSTACK),
N(3),
N(4),
N(5),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
script_pubkey: &[
N(1),
N(2),
N(3),
N(4),
N(5),
N(6),
N(7),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Max-size (10,000-byte), max-push(520 bytes), max-opcodes(201), max stack size(1,000 items). 0x6f is 3DUP, 0x61 is NOP
TestVector {
script_sig: &[
A(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
script_pubkey: &[
A(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
O(_2DUP),
H(
"616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// >201 opcodes, but RESERVED (H("50)"), doesn’t count towards opcode limit.
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(IF),
H(
"5050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050505050",
),
O(ENDIF),
N(1),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// The following is useful for checking implementations of BN_bn2mpi
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H("01"), H("01"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(127)],
script_pubkey: &[H("01"), H("7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Leave room for the sign bit
TestVector {
script_sig: &[N(128)],
script_pubkey: &[H("02"), H("8000"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(32767)],
script_pubkey: &[H("02"), H("FF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(32768)],
script_pubkey: &[H("03"), H("008000"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(8388607)],
script_pubkey: &[H("03"), H("FFFF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(8388608)],
script_pubkey: &[H("04"), H("00008000"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647)],
script_pubkey: &[H("04"), H("FFFFFF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483648)],
script_pubkey: &[H("05"), H("0000008000"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("05ffffffff7f")],
script_pubkey: &[H("05"), H("FFFFFFFF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("06000000008000")],
script_pubkey: &[H("06"), H("FFFFFFFF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("08ffffffffffffff7f")],
script_pubkey: &[H("08"), H("FFFFFFFFFFFFFF7F"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Numbers are little-endian with the MSB being a sign bit
TestVector {
script_sig: &[N(-1)],
script_pubkey: &[H("01"), H("81"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-127)],
script_pubkey: &[H("01"), H("FF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-128)],
script_pubkey: &[H("02"), H("8080"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-32767)],
script_pubkey: &[H("02"), H("FFFF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-32768)],
script_pubkey: &[H("03"), H("008080"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-8388607)],
script_pubkey: &[H("03"), H("FFFFFF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-8388608)],
script_pubkey: &[H("04"), H("00008080"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483647)],
script_pubkey: &[H("04"), H("FFFFFFFF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483648)],
script_pubkey: &[H("05"), H("0000008080"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-4294967295)],
script_pubkey: &[H("05"), H("FFFFFFFF80"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("05ffffffffff")],
script_pubkey: &[H("05"), H("FFFFFFFFFF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("06000000008080")],
script_pubkey: &[H("06"), H("000000008080"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("08ffffffffffffffff")],
script_pubkey: &[H("08"), H("FFFFFFFFFFFFFFFF"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// We can do math on 4-byte integers, and compare 5-byte ones
TestVector {
script_sig: &[N(2147483647)],
script_pubkey: &[O(_1ADD), N(2147483648), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2147483647)],
script_pubkey: &[O(_1ADD), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-2147483647)],
script_pubkey: &[O(_1ADD), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Not the same byte array...
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H("02"), H("0100"), O(EQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// ... but they are numerically equal
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H("02"), H("0100"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11)],
script_pubkey: &[H("4c"), H("03"), H("0b0000"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[H("01"), H("80"), O(EQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Zero numerically equals negative zero
TestVector {
script_sig: &[N(0)],
script_pubkey: &[H("01"), H("80"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[H("02"), H("0080"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("03"), H("000080")],
script_pubkey: &[H("04"), H("00000080"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("03"), H("100080")],
script_pubkey: &[H("04"), H("10000080"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("03"), H("100000")],
script_pubkey: &[H("04"), H("10000000"), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// The following tests check the if(stack.size() < N) tests in each opcode
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// They are here to catch copy-and-paste errors
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Most of them are duplicated elsewhere,
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOTIF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// but, hey, more is always better, right?
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(VERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(TOALTSTACK), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(TOALTSTACK), O(FROMALTSTACK)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(_2DROP), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(_2DUP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), N(1)],
script_pubkey: &[O(_3DUP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), N(0), N(0)],
script_pubkey: &[O(_2OVER)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), N(0), N(0), N(0), N(0)],
script_pubkey: &[O(_2ROT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1), N(0), N(0)],
script_pubkey: &[O(_2SWAP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IFDUP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(DEPTH), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(DROP), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(NIP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(OVER)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), N(0), N(0), N(3)],
script_pubkey: &[O(PICK)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(PICK)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), N(0), N(0), N(3)],
script_pubkey: &[O(ROLL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(ROLL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0), N(0)],
script_pubkey: &[O(ROT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(SWAP)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(TUCK)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(SIZE)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(EQUALVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_0 and bools must have identical byte representations
TestVector {
script_sig: &[N(0), N(0), N(1)],
script_pubkey: &[O(EQUAL), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(_1ADD)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(2)],
script_pubkey: &[O(_1SUB)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1)],
script_pubkey: &[O(NEGATE)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1)],
script_pubkey: &[O(ABS)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOT)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1)],
script_pubkey: &[O(_0NOTEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(ADD)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(SUB)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(-1)],
script_pubkey: &[O(BOOLAND)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0)],
script_pubkey: &[O(BOOLOR)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0)],
script_pubkey: &[O(NUMNOTEQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0)],
script_pubkey: &[O(LESSTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(GREATERTHAN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(GREATERTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(0)],
script_pubkey: &[O(MIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(MAX)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(-1), N(-1), N(0)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(RIPEMD160)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(SHA1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(SHA256)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(HASH160)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(HASH256)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP1), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(CHECKLOCKTIMEVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP3), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP4), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP5), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP6), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP7), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP8), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP9), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP10), N(1)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// CHECKMULTISIG is allowed to have zero keys and/or sigs
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
// Zero sigs means no sigs are checked
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
N(1),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
N(1),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
// CHECKMULTISIG is allowed to have zero keys and/or sigs
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
// Zero sigs means no sigs are checked
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
N(1),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
N(1),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
// Test from up to 20 pubkeys, all not checked
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
N(2),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
N(3),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
N(4),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
N(5),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
N(6),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
N(7),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
N(8),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
N(9),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
N(10),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
N(11),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
N(12),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
N(13),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
N(14),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
N(15),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
N(16),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
N(17),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
N(18),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
N(19),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
O(VERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
N(1),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
N(2),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
N(3),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
N(4),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
N(5),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
N(6),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
N(7),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
N(8),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
N(9),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
N(10),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
N(11),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
N(12),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
N(13),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
N(14),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
N(15),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
N(16),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
N(17),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
N(18),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
N(19),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
O(DEPTH),
N(0),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 20,
},
// nOpCount is incremented by the number of keys evaluated in addition to the usual one op per op. In this case we have zero keys, so we can execute 201 CHECKMULTISIGS
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 4_020,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 4_020,
},
// Even though there are no signatures being checked nOpCount is incremented by the number of keys.
TestVector {
script_sig: &[],
script_pubkey: &[
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 180,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 180,
},
// Very basic P2SH
TestVector {
script_sig: &[N(0), H("01"), N(1)],
script_pubkey: &[
O(HASH160),
H("14"),
H("da1745e9b549bd0bfa1a569971c77eba30cd5a4b"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("4c"), N(0), H("01"), N(1)],
script_pubkey: &[
O(HASH160),
H("14"),
H("da1745e9b549bd0bfa1a569971c77eba30cd5a4b"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Basic PUSH signedness check
TestVector {
script_sig: &[
H("40"),
H(
"42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242",
),
],
script_pubkey: &[
H("4d"),
H("4000"),
H(
"42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242",
),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Basic PUSHDATA1 signedness check
TestVector {
script_sig: &[
H("4c"),
H("40"),
H(
"42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242",
),
],
script_pubkey: &[
H("4d"),
H("4000"),
H(
"42424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242",
),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// all PUSHDATA forms are equivalent
// PUSHDATA1 of 75 bytes equals direct push of it
TestVector {
script_sig: &[
H("4c"),
H("4b"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
],
script_pubkey: &[
H("4b"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
O(EQUAL),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// PUSHDATA2 of 255 bytes equals PUSHDATA1 of it
TestVector {
script_sig: &[
H("4d"),
H("FF00"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
],
script_pubkey: &[
H("4c"),
H("FF"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
O(EQUAL),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Basic OP_0 execution
TestVector {
script_sig: &[H("00")],
script_pubkey: &[O(SIZE), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Numeric pushes
// OP1_NEGATE pushes 0x81
TestVector {
script_sig: &[H("01"), H("81")],
script_pubkey: &[H("4f"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_1 pushes 0x01
TestVector {
script_sig: &[H("01"), H("01")],
script_pubkey: &[H("51"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_2 pushes 0x02
TestVector {
script_sig: &[H("01"), H("02")],
script_pubkey: &[H("52"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_3 pushes 0x03
TestVector {
script_sig: &[H("01"), H("03")],
script_pubkey: &[H("53"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_4 pushes 0x04
TestVector {
script_sig: &[H("01"), H("04")],
script_pubkey: &[H("54"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_5 pushes 0x05
TestVector {
script_sig: &[H("01"), H("05")],
script_pubkey: &[H("55"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_6 pushes 0x06
TestVector {
script_sig: &[H("01"), H("06")],
script_pubkey: &[H("56"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_7 pushes 0x07
TestVector {
script_sig: &[H("01"), H("07")],
script_pubkey: &[H("57"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_8 pushes 0x08
TestVector {
script_sig: &[H("01"), H("08")],
script_pubkey: &[H("58"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_9 pushes 0x09
TestVector {
script_sig: &[H("01"), H("09")],
script_pubkey: &[H("59"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_10 pushes 0x0a
TestVector {
script_sig: &[H("01"), H("0a")],
script_pubkey: &[H("5a"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_11 pushes 0x0b
TestVector {
script_sig: &[H("01"), H("0b")],
script_pubkey: &[H("5b"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_12 pushes 0x0c
TestVector {
script_sig: &[H("01"), H("0c")],
script_pubkey: &[H("5c"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_13 pushes 0x0d
TestVector {
script_sig: &[H("01"), H("0d")],
script_pubkey: &[H("5d"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_14 pushes 0x0e
TestVector {
script_sig: &[H("01"), H("0e")],
script_pubkey: &[H("5e"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_15 pushes 0x0f
TestVector {
script_sig: &[H("01"), H("0f")],
script_pubkey: &[H("5f"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// OP_16 pushes 0x10
TestVector {
script_sig: &[H("01"), H("10")],
script_pubkey: &[H("60"), O(EQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Equivalency of different numeric encodings"
// 0x8000 equals 128
TestVector {
script_sig: &[H("02"), H("8000")],
script_pubkey: &[N(128), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x00 numequals 0
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x80 (negative zero) numequals 0
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x0080 numequals 0
TestVector {
script_sig: &[H("02"), H("0080")],
script_pubkey: &[N(0), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// 0x0500 numequals 5
TestVector {
script_sig: &[H("02"), H("0500")],
script_pubkey: &[N(5), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("03"), H("ff7f80")],
script_pubkey: &[H("02"), H("ffff"), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("03"), H("ff7f00")],
script_pubkey: &[H("02"), H("ff7f"), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("04"), H("ffff7f80")],
script_pubkey: &[H("03"), H("ffffff"), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("04"), H("ffff7f00")],
script_pubkey: &[H("03"), H("ffff7f"), O(NUMEQUAL)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// Unevaluated non-minimal pushes are ignored
// non-minimal PUSHDATA1 ignored
TestVector {
script_sig: &[N(0), O(IF), H("4c"), H("00"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// non-minimal PUSHDATA2 ignored
TestVector {
script_sig: &[N(0), O(IF), H("4d"), H("0000"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// non-minimal PUSHDATA4 ignored
TestVector {
script_sig: &[N(0), O(IF), H("4c"), H("00000000"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// 1NEGATE equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("81"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_1 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("01"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_2 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("02"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_3 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("03"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_4 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("04"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_5 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("05"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_6 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("06"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_7 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("07"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_8 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("08"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_9 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("09"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_10 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0a"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_11 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0b"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_12 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0c"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_13 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0d"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_14 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0e"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_15 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("0f"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// OP_16 equiv
TestVector {
script_sig: &[N(0), O(IF), H("01"), H("10"), O(ENDIF), N(1)],
script_pubkey: &[],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// Numeric minimaldata rules are only applied when a stack item is numerically evaluated; the
// push itself is allowed
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0180")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0100")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0200")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0300")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0400")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0500")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0600")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0700")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0800")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0900")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0a00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0b00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0c00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0d00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0e00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0f00")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("1000")],
script_pubkey: &[N(1)],
flags: interpreter::Flags::MinimalData,
result: ok(true),
sigop_count: 0,
},
// Valid version of the 'Test every numeric-accepting opcode for correct handling of the numeric
// minimal encoding rule' script_invalid test
TestVector {
script_sig: &[N(1), H("02"), H("0000")],
script_pubkey: &[O(PICK), O(DROP)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), H("02"), H("0000")],
script_pubkey: &[O(ROLL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_1ADD), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_1SUB), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(NEGATE), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(ABS), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_0NOTEQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(ADD), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(ADD), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(SUB), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(SUB), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(BOOLAND), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(BOOLAND), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(BOOLOR), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(BOOLOR), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMEQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(1)],
script_pubkey: &[O(NUMEQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMNOTEQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(NUMNOTEQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(LESSTHAN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(LESSTHAN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(GREATERTHAN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(GREATERTHAN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(LESSTHANOREQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(LESSTHANOREQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(GREATERTHANOREQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(GREATERTHANOREQUAL), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(MIN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(MIN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(MAX), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(MAX), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0), N(0)],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0), N(1)],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(CHECKMULTISIGVERIFY), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(CHECKMULTISIGVERIFY), N(1)],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
// While not really correctly DER encoded, the empty signature is allowed by
// STRICTENC to provide a compact way to provide a deliberately invalid signature.
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
O(CHECKSIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: ok(true),
sigop_count: 1,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[
N(1),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
N(1),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: ok(true),
sigop_count: 20,
},
// CHECKMULTISIG evaluation order tests. CHECKMULTISIG evaluates signatures and
// pubkeys in a specific order, and will exit early if the number of signatures
// left to check is greater than the number of keys left. As STRICTENC fails the
// script when it reaches an invalidly encoded signature or pubkey, we can use it
// to test the exact order in which signatures and pubkeys are evaluated by
// distinguishing CHECKMULTISIG returning false on the stack and the script as a
// whole failing.
// See also the corresponding inverted versions of these tests in test_vectors::invalid.
// 2-of-2 CHECKMULTISIG NOT with the second pubkey invalid, and both signatures validly encoded.
// Valid pubkey fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid
// pubkey.
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
],
script_pubkey: &[
N(2),
N(0),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: ok(true),
sigop_count: 20,
},
// 2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but second signature invalid. Valid pubkey
// fails, and CHECKMULTISIG exits early, prior to evaluation of second invalid signature.
TestVector {
script_sig: &[
N(0),
N(0),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
],
script_pubkey: &[
N(2),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: ok(true),
sigop_count: 20,
},
// Test the test: we should have an empty stack after scriptSig evaluation
TestVector {
script_sig: &[],
script_pubkey: &[O(DEPTH)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[],
script_pubkey: &[O(NOP), O(DEPTH)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(DEPTH)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOP), O(DEPTH)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(DEPTH)],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// PUSHDATA1 with not enough bytes
TestVector {
script_sig: &[H("4c01")],
script_pubkey: &[H("01"), O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Read { expected_bytes: 1, available_bytes: 0 })),
sigop_count: 0,
},
// PUSHDATA2 with not enough bytes
TestVector {
script_sig: &[H("4d0200ff")],
script_pubkey: &[H("01"), O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Read { expected_bytes: 2, available_bytes: 1 })),
sigop_count: 0,
},
// PUSHDATA4 with not enough bytes
TestVector {
script_sig: &[H("4e03000000ffff")],
script_pubkey: &[H("01"), O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Read { expected_bytes: 3, available_bytes: 2 })),
sigop_count: 0,
},
// 0x50 is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("50"), O(ENDIF), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// 0x51 through 0x60 push 1 through 16 onto stack
TestVector {
script_sig: &[H("52")],
script_pubkey: &[H("5f"), O(ADD), H("60"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// VER non-functional
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), B(OP_VER), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VER)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// VERIF illegal everywhere
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), B(OP_VERIF), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// VERIF illegal everywhere
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), O(ELSE), N(1), O(ELSE), B(OP_VERIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// VERNOTIF illegal everywhere
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), B(OP_VERNOTIF), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERNOTIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// VERNOTIF illegal everywhere
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), O(ELSE), N(1), O(ELSE), B(OP_VERNOTIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERNOTIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// IF/ENDIF can’t span scriptSig/scriptPubKey
TestVector {
script_sig: &[N(1), O(IF)],
script_pubkey: &[N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(IF), N(0), O(ENDIF)],
script_pubkey: &[N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), O(ELSE), N(0), O(ENDIF)],
script_pubkey: &[N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ELSE)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), O(NOTIF)],
script_pubkey: &[N(123)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(DUP), O(IF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(DUP), O(IF), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(IF), N(1), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(NOTIF), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(IF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(IF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[
O(IF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[
O(IF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[O(NOTIF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(NOTIF), O(IF), N(1), O(ELSE), N(0), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[
O(NOTIF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0)],
script_pubkey: &[
O(NOTIF),
O(IF),
N(1),
O(ELSE),
N(0),
O(ENDIF),
O(ELSE),
O(IF),
N(0),
O(ELSE),
N(1),
O(ENDIF),
O(ENDIF),
],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// Multiple ELSEs
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(RETURN), O(ELSE), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RETURN)), interpreter::Error::OpReturn)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1), O(ELSE), O(ELSE), O(RETURN), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RETURN)), interpreter::Error::OpReturn)),
sigop_count: 0,
},
// Malformed IF/ELSE/ENDIF sequence
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ELSE)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(ENDIF), O(ELSE)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(ENDIF), O(ELSE), O(IF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(ELSE), O(ENDIF), O(ELSE)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ELSE)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(ELSE), O(ENDIF), O(ELSE), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ELSE)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), O(ELSE), O(ELSE), O(ENDIF), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(RETURN)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RETURN)), interpreter::Error::OpReturn)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP), O(IF), O(RETURN), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RETURN)), interpreter::Error::OpReturn)),
sigop_count: 0,
},
// canonical prunable txout format
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(RETURN), A("data")],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RETURN)), interpreter::Error::OpReturn)),
sigop_count: 0,
},
// still prunable because IF/ENDIF can’t span scriptSig/scriptPubKey
TestVector {
script_sig: &[N(0), O(IF)],
script_pubkey: &[O(RETURN), O(ENDIF), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(VERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(VERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(VERIFY)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(VERIFY), N(0)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// alt stack not shared between sig/pubkey
TestVector {
script_sig: &[N(1), O(TOALTSTACK)],
script_pubkey: &[O(FROMALTSTACK), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(FROMALTSTACK)), interpreter::Error::InvalidStackOperation(Some((0,0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(IFDUP)],
script_pubkey: &[O(DEPTH), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(IFDUP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(DROP)],
script_pubkey: &[O(DEPTH), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(DROP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(DUP)],
script_pubkey: &[O(DEPTH), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(DUP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP), N(1), O(ADD), N(2), O(EQUALVERIFY), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NIP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NIP)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), O(NIP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NIP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), N(0), O(NIP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(OVER), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OVER)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(OVER)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OVER)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(OVER), O(DEPTH), N(3), O(EQUALVERIFY)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[O(PICK), N(19), O(EQUALVERIFY), O(DEPTH), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((21, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(0), O(PICK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[N(-1), O(PICK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(None))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(0),
O(PICK),
N(20),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(1),
O(PICK),
N(21),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(2),
O(PICK),
N(22),
O(EQUALVERIFY),
O(DEPTH),
N(3),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(0), O(ROLL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROLL)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[N(-1), O(ROLL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROLL)), interpreter::Error::InvalidStackOperation(None))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(0),
O(ROLL),
N(20),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(1),
O(ROLL),
N(21),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[
N(2),
O(ROLL),
N(22),
O(EQUALVERIFY),
O(DEPTH),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(ROT), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROT)), interpreter::Error::InvalidStackOperation(Some((2, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), O(ROT), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROT)), interpreter::Error::InvalidStackOperation(Some((2, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), N(2), O(ROT), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROT)), interpreter::Error::InvalidStackOperation(Some((2, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(0), N(1), N(2), O(ROT)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SWAP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SWAP)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(SWAP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SWAP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(SWAP), N(1), O(EQUALVERIFY)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(TUCK), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(TUCK)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(TUCK), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(TUCK)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(0)],
script_pubkey: &[O(TUCK), O(DEPTH), N(3), O(EQUALVERIFY), O(SWAP), O(_2DROP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_2DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2DUP)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(_2DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2DUP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_3DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::InvalidStackOperation(Some((2, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(_3DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::InvalidStackOperation(Some((2, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(2)],
script_pubkey: &[O(_3DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::InvalidStackOperation(Some((2, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_2OVER), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2OVER)), interpreter::Error::InvalidStackOperation(Some((3, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[N(2), N(3), O(_2OVER), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2OVER)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_2SWAP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2SWAP)), interpreter::Error::InvalidStackOperation(Some((3, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(DUP), N(1), O(ADD), N(2), O(EQUALVERIFY), N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NIP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NIP)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), O(NIP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NIP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(1), N(0), O(NIP)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(OVER), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OVER)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(OVER)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OVER)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(OVER), O(DEPTH), N(3), O(EQUALVERIFY)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(19), N(20), N(21)],
script_pubkey: &[O(PICK), N(19), O(EQUALVERIFY), O(DEPTH), N(2), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((21, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[N(0), O(PICK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[N(2), N(3), O(_2SWAP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2SWAP)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SIZE), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SIZE)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// TEST DISABLED OP CODES (CVE-2010-5137)
// CAT disabled
TestVector {
script_sig: &[A("a"), A("b")],
script_pubkey: &[D(OP_CAT)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_CAT)))),
sigop_count: 0,
},
// CAT disabled
TestVector {
script_sig: &[A("a"), A("b"), N(0)],
script_pubkey: &[O(IF), D(OP_CAT), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_CAT)))),
sigop_count: 0,
},
// SUBSTR disabled
TestVector {
script_sig: &[A("abc"), N(1), N(1)],
script_pubkey: &[D(OP_SUBSTR)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_SUBSTR)))),
sigop_count: 0,
},
// SUBSTR disabled
TestVector {
script_sig: &[A("abc"), N(1), N(1), N(0)],
script_pubkey: &[O(IF), D(OP_SUBSTR), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_SUBSTR)))),
sigop_count: 0,
},
// LEFT disabled
TestVector {
script_sig: &[A("abc"), N(2), N(0)],
script_pubkey: &[O(IF), D(OP_LEFT), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_LEFT)))),
sigop_count: 0,
},
// RIGHT disabled
TestVector {
script_sig: &[A("abc"), N(2), N(0)],
script_pubkey: &[O(IF), D(OP_RIGHT), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_RIGHT)))),
sigop_count: 0,
},
// INVERT disabled
TestVector {
script_sig: &[A("abc")],
script_pubkey: &[O(IF), D(OP_INVERT), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_INVERT)))),
sigop_count: 0,
},
// AND disabled
TestVector {
script_sig: &[
N(1),
N(2),
N(0),
O(IF),
D(OP_AND),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_AND)))),
sigop_count: 0,
},
// OR disabled
TestVector {
script_sig: &[
N(1),
N(2),
N(0),
O(IF),
D(OP_OR),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_OR)))),
sigop_count: 0,
},
// XOR disabled
TestVector {
script_sig: &[
N(1),
N(2),
N(0),
O(IF),
D(OP_XOR),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_XOR)))),
sigop_count: 0,
},
// 2MUL disabled
TestVector {
script_sig: &[
N(2),
N(0),
O(IF),
D(OP_2MUL),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_2MUL)))),
sigop_count: 0,
},
// 2DIV disabled
TestVector {
script_sig: &[
N(2),
N(0),
O(IF),
D(OP_2DIV),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_2DIV)))),
sigop_count: 0,
},
// MUL disabled
TestVector {
script_sig: &[
N(2),
N(2),
N(0),
O(IF),
D(OP_MUL),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_MUL)))),
sigop_count: 0,
},
// DIV disabled
TestVector {
script_sig: &[
N(2),
N(2),
N(0),
O(IF),
D(OP_DIV),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_DIV)))),
sigop_count: 0,
},
// MOD disabled
TestVector {
script_sig: &[
N(2),
N(2),
N(0),
O(IF),
D(OP_MOD),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_MOD)))),
sigop_count: 0,
},
// LSHIFT disabled
TestVector {
script_sig: &[
N(2),
N(2),
N(0),
O(IF),
D(OP_LSHIFT),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_LSHIFT)))),
sigop_count: 0,
},
// RSHIFT disabled
TestVector {
script_sig: &[
N(2),
N(2),
N(0),
O(IF),
D(OP_RSHIFT),
O(ELSE),
N(1),
O(ENDIF),
],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_RSHIFT)))),
sigop_count: 0,
},
// EQUAL must error when there are no stack items
TestVector {
script_sig: &[],
script_pubkey: &[O(EQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// EQUAL must error when there are not 2 stack items
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(EQUAL), O(NOT)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(1)],
script_pubkey: &[O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), O(ADD)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[N(11), N(1), O(ADD), N(12), O(SUB)],
script_pubkey: &[N(11), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// arithmetic operands must be in range [-2^31...2^31]
TestVector {
script_sig: &[N(2147483648), N(0), O(ADD)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ADD)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// arithmetic operands must be in range TestVector [-2^31...2^31]
TestVector {
script_sig: &[N(-2147483648), N(0), O(ADD)],
script_pubkey: &[O(NOP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ADD)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// NUMEQUAL must be in numeric range
TestVector {
script_sig: &[N(2147483647), O(DUP), O(ADD)],
script_pubkey: &[N(4294967294), O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUAL)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// NOT is an arithmetic operand
TestVector {
script_sig: &[A("abcdef"), O(NOT)],
script_pubkey: &[N(0), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 6 }))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), O(DUP), D(OP_MUL)],
script_pubkey: &[N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_MUL)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), O(DUP), D(OP_DIV)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_DIV)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), D(OP_2MUL)],
script_pubkey: &[N(4), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_2MUL)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), D(OP_2DIV)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_2DIV)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(7), N(3), D(OP_MOD)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_MOD)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), N(2), D(OP_LSHIFT)],
script_pubkey: &[N(8), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_LSHIFT)))),
sigop_count: 0,
},
// disabled
TestVector {
script_sig: &[N(2), N(1), D(OP_RSHIFT)],
script_pubkey: &[N(1), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::from(opcode::Error::Disabled(Some(OP_RSHIFT)))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(NOP1),
O(CHECKLOCKTIMEVERIFY),
O(NOP3),
O(NOP4),
O(NOP5),
O(NOP6),
O(NOP7),
O(NOP8),
O(NOP9),
O(NOP10),
N(2),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
TestVector {
script_sig: &[
A("NOP_1_to_10"),
O(NOP1),
O(CHECKLOCKTIMEVERIFY),
O(NOP3),
O(NOP4),
O(NOP5),
O(NOP6),
O(NOP7),
O(NOP8),
O(NOP9),
O(NOP10),
],
script_pubkey: &[A("NOP_1_to_11"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// Ensure 100% coverage of discouraged NOPS
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP1)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP1)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP3)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP3)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP4)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP4)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP5)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP5)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP6)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP6)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP7)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP7)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP8)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP8)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP9)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP9)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NOP10)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP10)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
// Discouraged NOP10 in scriptSig
TestVector {
script_sig: &[O(NOP10)],
script_pubkey: &[N(1)],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP10)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
// Discouraged NOP10 in redeemScript
TestVector {
script_sig: &[N(1), H("01"), H("b9")],
script_pubkey: &[
O(HASH160),
H("14"),
H("15727299b05b45fdaf9ac9ecf7565cfe27c3e567"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH.union(interpreter::Flags::DiscourageUpgradableNOPs),
result: err(script::ComponentType::Redeem, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP10)), interpreter::Error::DiscourageUpgradableNOPs)),
sigop_count: 0,
},
// opcode 0x50 is reserved
TestVector {
script_sig: &[H("50")],
script_pubkey: &[N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// opcodes above MAX_OPCODE invalid if executed
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ba"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xba))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("bb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xbb))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("bc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xbc))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("bd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xbd))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("be"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xbe))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("bf"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xbf))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc0))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc1))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc2))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc3))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc4))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc5))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc6))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc7))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc8))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("c9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xc9))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ca"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xca))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("cb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xcb))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("cc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xcc))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("cd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xcd))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ce"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xce))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("cf"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xcf))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd0))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd1))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd2))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd3))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd4))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd5))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd6))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd7))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd8))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("d9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xd9))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("da"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xda))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("db"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xdb))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("dc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xdc))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("dd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xdd))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("de"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xde))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("df"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xdf))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe0))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe1))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe2))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe3))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe4))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe5))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe6))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe7))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe8))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("e9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xe9))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ea"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xea))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("eb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xeb))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ec"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xec))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ed"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xed))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ee"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xee))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ef"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xef))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f0"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf0))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f1"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf1))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f2"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf2))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f3"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf3))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f4"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf4))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f5"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf5))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f6"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf6))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f7"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf7))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f8"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf8))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("f9"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xf9))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("fa"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xfa))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("fb"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xfb))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("fc"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xfc))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("fd"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xfd))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("fe"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xfe))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), H("ff"), O(ELSE), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xff))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// invalid because scriptSig and scriptPubKey are processed separately
TestVector {
script_sig: &[N(1), O(IF), N(1), O(ELSE)],
script_pubkey: &[H("ff"), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(RIPEMD160)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RIPEMD160)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SHA1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SHA1)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SHA256)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SHA256)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(HASH160)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(HASH160)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(HASH256)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(HASH256)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// >520 byte push
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[H(
"4d09026262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262",
)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::PushSize(Some(521)))),
sigop_count: 0,
},
// >520 byte push in non-executed IF branch
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(IF),
H(
"4d09026262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262626262",
),
O(ENDIF),
N(1),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::PushSize(Some(521)))),
sigop_count: 0,
},
// >201 opcodes executed. 0x61 is NOP
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H(
"61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOP)), interpreter::Error::OpCount)),
sigop_count: 0,
},
// >201 opcodes including non-executed IF branch. 0x61 is NOP
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
O(IF),
H(
"6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
),
O(ENDIF),
N(1),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::OpCount)),
sigop_count: 0,
},
// >1,000 stack size (0x6f is 3DUP)
TestVector {
script_sig: &[
N(1),
N(2),
N(3),
N(4),
N(5),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
script_pubkey: &[
N(1),
N(2),
N(3),
N(4),
N(5),
N(6),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::StackSize(None))),
sigop_count: 0,
},
// >1,000 stack+altstack size
TestVector {
script_sig: &[
N(1),
N(2),
N(3),
N(4),
N(5),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
script_pubkey: &[
N(1),
O(TOALTSTACK),
N(2),
O(TOALTSTACK),
N(3),
N(4),
N(5),
N(6),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::StackSize(None))),
sigop_count: 0,
},
// 10,001-byte scriptPubKey
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[
N(0),
A(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
A(
"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
),
H(
"6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
),
O(_2DUP),
H(
"616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::ScriptSize(Some(10001))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP1)],
script_pubkey: &[O(NOP10)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// OP_VER is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_VER)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VER)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_VERIF is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_VERIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_VERNOTIF is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_VERNOTIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VERNOTIF)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_RESERVED is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_RESERVED)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_RESERVED1 is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_RESERVED1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED1)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_RESERVED2 is reserved
TestVector {
script_sig: &[N(1)],
script_pubkey: &[B(OP_RESERVED2)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED2)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// 0xba == MAX_OPCODE + 1
TestVector {
script_sig: &[N(1)],
script_pubkey: &[H("ba")],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(Unknown(0xba))), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// We cannot do math on 5-byte integers
TestVector {
script_sig: &[N(2147483648)],
script_pubkey: &[O(_1ADD), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1ADD)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// We cannot do math on 5-byte integers
TestVector {
script_sig: &[N(2147483648)],
script_pubkey: &[O(NEGATE), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NEGATE)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// Because we use a sign bit, -2147483648 is also 5 bytes
TestVector {
script_sig: &[N(-2147483648)],
script_pubkey: &[O(_1ADD), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1ADD)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// We cannot do math on 5-byte integers, even if the result is 4-bytes
TestVector {
script_sig: &[N(2147483647)],
script_pubkey: &[O(_1ADD), O(_1SUB), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1SUB)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// We cannot do math on 5-byte integers, even if the result is 4-bytes
TestVector {
script_sig: &[N(2147483648)],
script_pubkey: &[O(_1SUB), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1SUB)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// We cannot do BOOLOR on 5-byte integers (but we can still do IF etc)
TestVector {
script_sig: &[N(2147483648), N(1)],
script_pubkey: &[O(BOOLOR), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLOR)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// We cannot do BOOLAND on 5-byte integers
TestVector {
script_sig: &[N(2147483648), N(1)],
script_pubkey: &[O(BOOLAND), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLAND)), interpreter::Error::Num(num::Error::Overflow { max_size: 4, actual: 5 }))),
sigop_count: 0,
},
// ENDIF without IF
TestVector {
script_sig: &[N(1)],
script_pubkey: &[N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ENDIF)), interpreter::Error::UnbalancedConditional)),
sigop_count: 0,
},
// IF without ENDIF
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(IF), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
// IFs don’t carry over
TestVector {
script_sig: &[N(1), O(IF), N(1)],
script_pubkey: &[O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::UnclosedConditional(1)),
sigop_count: 0,
},
// The following tests check the if(stack.size() < N) tests in each opcode
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(IF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(IF)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// They are here to catch copy-and-paste errors
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOTIF), N(1), O(ENDIF)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOTIF)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// Most of them are duplicated elsewhere,
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(VERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(VERIFY)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// but, hey, more is always better, right?
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(TOALTSTACK), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(TOALTSTACK)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(FROMALTSTACK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(FROMALTSTACK)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(_2DROP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2DROP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(_2DUP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2DUP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(_3DUP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_3DUP)), interpreter::Error::InvalidStackOperation(Some((2, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), N(1)],
script_pubkey: &[O(_2OVER)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2OVER)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), N(1), N(1), N(1)],
script_pubkey: &[O(_2ROT)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2ROT)), interpreter::Error::InvalidStackOperation(Some((5, 5))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), N(1)],
script_pubkey: &[O(_2SWAP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_2SWAP)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(IFDUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(IFDUP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(DROP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(DROP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(DUP), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(DUP)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NIP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NIP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(OVER)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OVER)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), N(1), N(3)],
script_pubkey: &[O(PICK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(PICK), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1), N(1), N(3)],
script_pubkey: &[O(ROLL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROLL)), interpreter::Error::InvalidStackOperation(Some((3, 3))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(ROLL), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROLL)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(ROT)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROT)), interpreter::Error::InvalidStackOperation(Some((2, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(SWAP)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SWAP)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(TUCK)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(TUCK)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SIZE), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SIZE)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(EQUAL), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(EQUALVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_1ADD), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1ADD)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_1SUB), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1SUB)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NEGATE), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NEGATE)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(ABS), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ABS)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(NOT), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(_0NOTEQUAL), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_0NOTEQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(ADD)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ADD)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(SUB)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SUB)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(BOOLAND)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLAND)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(BOOLOR)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLOR)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NUMEQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUALVERIFY)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(NUMNOTEQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMNOTEQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(LESSTHAN)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHAN)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(GREATERTHAN)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHAN)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(LESSTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHANOREQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(GREATERTHANOREQUAL)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHANOREQUAL)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(MIN)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MIN)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[O(MAX)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MAX)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), N(1)],
script_pubkey: &[O(WITHIN)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(WITHIN)), interpreter::Error::InvalidStackOperation(Some((2, 2))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(RIPEMD160), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(RIPEMD160)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SHA1), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SHA1)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(SHA256), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SHA256)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(HASH160), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(HASH160)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP)],
script_pubkey: &[O(HASH256), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(HASH256)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 0,
},
// Increase CHECKSIG and CHECKMULTISIG negative test coverage
// CHECKSIG must error when there are no stack items
TestVector {
script_sig: &[],
script_pubkey: &[O(CHECKSIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 1,
},
// CHECKSIG must error when there are not 2 stack items
TestVector {
script_sig: &[N(0)],
script_pubkey: &[O(CHECKSIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 1,
},
// CHECKMULTISIG must error when there are no stack items
TestVector {
script_sig: &[],
script_pubkey: &[O(CHECKMULTISIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::InvalidStackOperation(Some((0, 0))))),
sigop_count: 20,
},
// CHECKMULTISIG must error when the specified number of pubkeys is negative
TestVector {
script_sig: &[],
script_pubkey: &[N(-1), O(CHECKMULTISIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: normalized_err(script::Error::Interpreter(None, interpreter::Error::PubKeyCount(None))),
sigop_count: 20,
},
// CHECKMULTISIG must error when there are not enough pubkeys on the stack
TestVector {
script_sig: &[],
script_pubkey: &[N(1), O(CHECKMULTISIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::InvalidStackOperation(Some((1, 0))))),
sigop_count: 20,
},
// CHECKMULTISIG must error when the specified number of signatures is negative
TestVector {
script_sig: &[],
script_pubkey: &[N(-1), N(0), O(CHECKMULTISIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: normalized_err(script::Error::Interpreter(None, interpreter::Error::SigCount(None))),
sigop_count: 20,
},
// CHECKMULTISIG must error when there are not enough signatures on the stack
TestVector {
script_sig: &[],
script_pubkey: &[N(1), A("pk1"), N(1), O(CHECKMULTISIG), O(NOT)],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::InvalidStackOperation(Some((3, 2))))),
sigop_count: 20,
},
// CHECKMULTISIG must push false to stack when signature is invalid when NOT in strict enc mode
TestVector {
script_sig: &[],
script_pubkey: &[
A("dummy"),
A("sig1"),
N(1),
A("pk1"),
N(1),
O(CHECKMULTISIG),
O(IF),
N(1),
O(ENDIF),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::WrongType)))),
sigop_count: 20,
},
// 202 CHECKMULTISIGS, fails due to 201 op limit
TestVector {
script_sig: &[],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
N(0),
N(0),
O(CHECKMULTISIG),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::OpCount)),
sigop_count: 4_040,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
N(0),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
O(CHECKMULTISIGVERIFY),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIGVERIFY)), interpreter::Error::InvalidStackOperation(Some((1, 1))))),
sigop_count: 4_040,
},
// Fails due to 201 script operation limit
TestVector {
script_sig: &[],
script_pubkey: &[
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIG),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::OpCount)),
sigop_count: 180,
},
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
O(NOP),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
N(0),
N(0),
A("a"),
A("b"),
A("c"),
A("d"),
A("e"),
A("f"),
A("g"),
A("h"),
A("i"),
A("j"),
A("k"),
A("l"),
A("m"),
A("n"),
A("o"),
A("p"),
A("q"),
A("r"),
A("s"),
A("t"),
N(20),
O(CHECKMULTISIGVERIFY),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIGVERIFY)), interpreter::Error::OpCount)),
sigop_count: 180,
},
// nPubKeys > 20
TestVector {
script_sig: &[
N(0),
N(0),
N(1),
N(2),
N(3),
N(4),
N(5),
N(6),
N(7),
N(8),
N(9),
N(10),
N(11),
N(12),
N(13),
N(14),
N(15),
N(16),
N(17),
N(18),
N(19),
N(20),
N(21),
],
script_pubkey: &[N(21), O(CHECKMULTISIG), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::PubKeyCount(None))),
sigop_count: 20,
},
// nSigs > nPubKeys
TestVector {
script_sig: &[N(0), A("sig"), N(1), N(0)],
script_pubkey: &[O(CHECKMULTISIG), N(1)],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::SigCount(None))),
sigop_count: 20,
},
// Tests for Script.IsPushOnly()
TestVector {
script_sig: &[O(NOP), H("01"), N(1)],
script_pubkey: &[
O(HASH160),
H("14"),
H("da1745e9b549bd0bfa1a569971c77eba30cd5a4b"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::SigPushOnly),
sigop_count: 0,
},
TestVector {
script_sig: &[O(NOP1), H("01"), N(1)],
script_pubkey: &[
O(HASH160),
H("14"),
H("da1745e9b549bd0bfa1a569971c77eba30cd5a4b"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::SigPushOnly),
sigop_count: 0,
},
// OP_RESERVED in P2SH should fail
TestVector {
script_sig: &[N(0), H("01"), H("50")],
script_pubkey: &[
O(HASH160),
H("14"),
H("ece424a6bb6ddf4db592c0faed60685047a361b1"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Redeem, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_RESERVED)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// OP_VER in P2SH should fail
TestVector {
script_sig: &[N(0), H("01"), B(OP_VER)],
script_pubkey: &[
O(HASH160),
H("14"),
H("0f4d7845db968f2a81b530b6f3c1d6246d4c7e01"),
O(EQUAL),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Redeem, script::Error::Interpreter(Some(opcode::PossiblyBad::from(OP_VER)), interpreter::Error::BadOpcode)),
sigop_count: 0,
},
// Basic OP_0 execution
TestVector {
script_sig: &[H("00")],
script_pubkey: &[A("00"), O(EQUAL)],
flags: DEFAULT_FLAGS,
result: ok(false),
sigop_count: 0,
},
// MINIMALDATA enforcement for PUSHDATAs
// Empty vector minimally represented by OP_0
TestVector {
script_sig: &[H("4c"), H("00")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// -1 minimally represented by OP_1NEGATE
TestVector {
script_sig: &[H("01"), H("81")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x81])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// 1 to 16 minimally represented by OP_1 to OP_16
TestVector {
script_sig: &[H("01"), H("01")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x01])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("02")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x02])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("03")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x03])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("04")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x04])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("05")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x05])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("06")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x06])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("07")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x07])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("08")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x08])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("09")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x09])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0a")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0a])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0b")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0b])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0c")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0c])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0d")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0d])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0e")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0e])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("0f")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x0f])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
TestVector {
script_sig: &[H("01"), H("10")],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::lv_from_slice(&[0x10])),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// PUSHDATA1 of 72 bytes minimally represented by direct push
TestVector {
script_sig: &[
H("4c"),
H("48"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::pb_from_lv(opcode::push_value::LargeValue::OP_PUSHDATA1(EmptyBoundedVec::from_vec(vec![0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]).expect("fits")))),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// PUSHDATA2 of 255 bytes minimally represented by PUSHDATA1
TestVector {
script_sig: &[
H("4d"),
H("FF00"),
H(
"111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::pb_from_lv(opcode::push_value::LargeValue::OP_PUSHDATA2(EmptyBoundedVec::from_vec(vec![0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]).expect("fits")))),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// PUSHDATA4 of 256 bytes minimally represented by PUSHDATA2
TestVector {
script_sig: &[
H("4e"),
H("00010000"),
H(
"11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
),
],
script_pubkey: &[O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(
script::ComponentType::Sig,
script::Error::Interpreter(
Some(Entry::pb_from_lv(opcode::push_value::LargeValue::OP_PUSHDATA4(EmptyBoundedVec::from_vec(vec![0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11]).expect("fits")))),
interpreter::Error::MinimalData)),
sigop_count: 0,
},
// MINIMALDATA enforcement for numeric arguments
// numequals 0
TestVector {
script_sig: &[H("01"), H("00")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0]))))),
sigop_count: 0,
},
// numequals 0
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
// 0x80 (negative zero) numequals 0
TestVector {
script_sig: &[H("01"), H("80")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![128]))))),
sigop_count: 0,
},
// numequals 0
TestVector {
script_sig: &[H("02"), H("0080")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 128]))))),
sigop_count: 0,
},
// numequals 5
TestVector {
script_sig: &[H("02"), H("0500")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![5, 0]))))),
sigop_count: 0,
},
// numequals 5
TestVector {
script_sig: &[H("03"), H("050000")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![5, 0, 0]))))),
sigop_count: 0,
},
// numequals -5
TestVector {
script_sig: &[H("02"), H("0580")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![5, 128]))))),
sigop_count: 0,
},
// numequals -5
TestVector {
script_sig: &[H("03"), H("050080")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![5, 0, 128]))))),
sigop_count: 0,
},
// Minimal encoding is 0xffff
TestVector {
script_sig: &[H("03"), H("ff7f80")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![255, 127, 128]))))),
sigop_count: 0,
},
// Minimal encoding is 0xff7f
TestVector {
script_sig: &[H("03"), H("ff7f00")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![255, 127, 0]))))),
sigop_count: 0,
},
// Minimal encoding is 0xffffff
TestVector {
script_sig: &[H("04"), H("ffff7f80")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![255, 255, 127, 128]))))),
sigop_count: 0,
},
// Minimal encoding is 0xffff7f
TestVector {
script_sig: &[H("04"), H("ffff7f00")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![255, 255, 127, 0]))))),
sigop_count: 0,
},
// Test every numeric-accepting opcode for correct handling of the numeric minimal encoding rule
TestVector {
script_sig: &[N(1), H("02"), H("0000")],
script_pubkey: &[O(PICK), O(DROP)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(PICK)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(1), H("02"), H("0000")],
script_pubkey: &[O(ROLL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ROLL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_1ADD), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1ADD)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_1SUB), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_1SUB)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(NEGATE), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NEGATE)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(ABS), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ABS)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(NOT), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NOT)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000")],
script_pubkey: &[O(_0NOTEQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(_0NOTEQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(ADD), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ADD)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(ADD), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(ADD)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(SUB), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SUB)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(SUB), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(SUB)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(BOOLAND), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLAND)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(BOOLAND), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLAND)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(BOOLOR), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLOR)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(BOOLOR), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(BOOLOR)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMEQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(1)],
script_pubkey: &[O(NUMEQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUALVERIFY)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(NUMEQUALVERIFY), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMEQUALVERIFY)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(NUMNOTEQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMNOTEQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(NUMNOTEQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(NUMNOTEQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(LESSTHAN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHAN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(LESSTHAN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHAN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(GREATERTHAN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHAN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(GREATERTHAN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHAN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(LESSTHANOREQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHANOREQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(LESSTHANOREQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(LESSTHANOREQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(GREATERTHANOREQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHANOREQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(GREATERTHANOREQUAL), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(GREATERTHANOREQUAL)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(MIN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MIN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(MIN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MIN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000")],
script_pubkey: &[O(MAX), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MAX)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0)],
script_pubkey: &[O(MAX), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(MAX)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[H("02"), H("0000"), N(0), N(0)],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(WITHIN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(WITHIN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(WITHIN), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(WITHIN)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 0,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0), N(1)],
script_pubkey: &[O(CHECKMULTISIG), O(DROP), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), N(0), H("02"), H("0000")],
script_pubkey: &[O(CHECKMULTISIGVERIFY), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIGVERIFY)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 20,
},
TestVector {
script_sig: &[N(0), H("02"), H("0000"), N(0)],
script_pubkey: &[O(CHECKMULTISIGVERIFY), N(1)],
flags: interpreter::Flags::MinimalData,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIGVERIFY)), interpreter::Error::Num(num::Error::NonMinimalEncoding(Some(vec![0, 0]))))),
sigop_count: 20,
},
// Order of CHECKMULTISIG evaluation tests, inverted by swapping the order of
// pubkeys/signatures so they fail due to the STRICTENC rules on validly encoded
// signatures and pubkeys.
// 2-of-2 CHECKMULTISIG NOT with the first pubkey invalid, and both signatures validly encoded.
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
],
script_pubkey: &[
N(2),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
N(0),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::PubKeyType)),
sigop_count: 20,
},
// 2-of-2 CHECKMULTISIG NOT with both pubkeys valid, but first signature invalid.
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022044dc17b0887c161bb67ba9635bf758735bdde503e4b0a0987f587f14a4e1143d022009a215772d49a85dae40d8ca03955af26ad3978a0ff965faa12915e9586249a501",
),
N(1),
],
script_pubkey: &[
N(2),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
H("21"),
H("02865c40293a680cb9c020e7b1e106d8c1916d3cef99aa431a56d253e69256dac0"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::WrongType)))),
sigop_count: 20,
},
// 2-of-3 with one valid and one invalid signature due to parse error, nSigs > validSigs
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f01",
),
H("46"),
H(
"304402205451ce65ad844dbb978b8bdedf5082e33b43cae8279c30f2c74d9e9ee49a94f802203fe95a7ccf74da7a232ee523ef4a53cb4d14bdd16289680cdb97a63819b8f42f",
),
],
script_pubkey: &[
N(2),
H("21"),
H("02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5"),
H("21"),
H("02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5"),
H("21"),
H("02a673638cb9587cb68ea08dbef685c6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5"),
N(3),
O(CHECKMULTISIG),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::IncorrectLength {actual: 67, expected: 68})))),
sigop_count: 20,
},
// Increase DERSIG test coverage
// Overly long signature is incorrectly encoded
TestVector {
script_sig: &[
H("4a"),
H(
"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::WrongType)))),
sigop_count: 1,
},
// R with leading null byte is incorrectly encoded
TestVector {
script_sig: &[Sig("000000", "01", 0)],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(
script::ComponentType::PubKey,
script::Error::Interpreter(
Some(opcode::PossiblyBad::from(CHECKSIG)),
interpreter::Error::from(signature::Error::from(
signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![0, 0, 0],
error: signature::InvalidDerInteger::LeadingNullByte
},
)),
),
),
sigop_count: 1,
},
// Missing S is incorrectly encoded
TestVector {
script_sig: &[
H("25"),
H("30220220010000000000000000000000000000000000000000000000000000000000000000"),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![],
error: signature::InvalidDerInteger::NotAnInteger
})))),
sigop_count: 1,
},
// S with invalid S length is incorrectly encoded
TestVector {
script_sig: &[
H("27"),
H("3024021077777777777777777777777777777777020a7777777777777777777777777777777701"),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119],
error: signature::InvalidDerInteger::IncorrectLength { actual: 16, expected: 10 }
})))),
sigop_count: 1,
},
// Non-integer R is incorrectly encoded
TestVector {
script_sig: &[
H("27"),
H("302403107777777777777777777777777777777702107777777777777777777777777777777701"),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![3, 16, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 2, 16, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119],
error: signature::InvalidDerInteger::NotAnInteger
})))),
sigop_count: 1,
},
// Non-integer S is incorrectly encoded
TestVector {
script_sig: &[
H("27"),
H("302402107777777777777777777777777777777703107777777777777777777777777777777701"),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![3, 16, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119],
error: signature::InvalidDerInteger::NotAnInteger
})))),
sigop_count: 1,
},
// Zero-length R is incorrectly encoded
TestVector {
script_sig: &[H("17"), H("3014020002107777777777777777777777777777777701")],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![],
error: signature::InvalidDerInteger::ZeroLength
})))),
sigop_count: 1,
},
// Zero-length S is incorrectly encoded
TestVector {
script_sig: &[H("17"), H("3014021077777777777777777777777777777777020001")],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![],
error: signature::InvalidDerInteger::ZeroLength
})))),
sigop_count: 1,
},
// Negative S is incorrectly encoded
TestVector {
script_sig: &[
H("27"),
H("302402107777777777777777777777777777777702108777777777777777777777777777777701"),
],
script_pubkey: &[N(0), O(CHECKSIG), O(NOT)],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![135, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 1,
},
// Automatically generated test cases
// P2PK
TestVector {
script_sig: &[
H("47"),
H(
"304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
),
],
script_pubkey: &[
H("41"),
H(
"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK, bad sig
TestVector {
script_sig: &[
H("47"),
H(
"304402200a5c6163f07b8c3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
),
],
script_pubkey: &[
H("41"),
H(
"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: ok(false),
sigop_count: 1,
},
// P2PKH
TestVector {
script_sig: &[
H("47"),
H(
"304402206e05a6fe23c59196ffe176c9ddc31e73a9885638f9d1328d47c0c703863b8876022076feb53811aa5b04e0e79f938eb19906cc5e67548bc555a8e8b8b0fc603d840c01",
),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
],
script_pubkey: &[
O(DUP),
O(HASH160),
H("14"),
H("1018853670f9f3b0582c5b9ee8ce93764ac32b93"),
O(EQUALVERIFY),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PKH, bad pubkey
TestVector {
script_sig: &[
H("47"),
H(
"3044022034bb0494b50b8ef130e2185bb220265b9284ef5b4b8a8da4d8415df489c83b5102206259a26d9cc0a125ac26af6153b17c02956855ebe1467412f066e402f5f05d1201",
),
H("21"),
H("03363d90d446b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
],
script_pubkey: &[
O(DUP),
O(HASH160),
H("14"),
H("c0834c0c158f53be706d234c38fd52de7eece656"),
O(EQUALVERIFY),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 1,
},
// P2PK anyonecanpay
TestVector {
script_sig: &[
H("47"),
H(
"304402204710a85181663b32d25c70ec2bbd14adff5ddfff6cb50d09e155ef5f541fc86c0220056b0cc949be9386ecc5f6c2ac0493269031dbb185781db90171b54ac127790281",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK anyonecanpay marked with normal hashtype
TestVector {
script_sig: &[
H("47"),
H(
"304402204710a85181663b32d25c70ec2bbd14adff5ddfff6cb50d09e155ef5f541fc86c0220056b0cc949be9386ecc5f6c2ac0493269031dbb185781db90171b54ac127790201",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: ok(false),
sigop_count: 1,
},
// P2SH(P2PK)
TestVector {
script_sig: &[
H("47"),
H(
"3044022003fef42ed6c7be8917441218f525a60e2431be978e28b7aca4d7a532cc413ae8022067a1f82c74e8d69291b90d148778405c6257bbcfc2353cc38a3e1f22bf44254601",
),
H("23"),
H("210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("23b0ad3477f2178bc0b3eed26e4e6316f4e83aa1"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 0,
},
// P2SH(P2PK), bad redeemscript
TestVector {
script_sig: &[
H("47"),
H(
"3044022003fef42ed6c7be8917441218f525a60e2431be978e28b7aca4d7a532cc413ae8022067a1f82c74e8d69291b90d148778405c6257bbcfc2353cc38a3e1f22bf44254601",
),
H("23"),
H("210279be667ef9dcbbac54a06295ce870b07029bfcdb2dce28d959f2815b16f81798ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("23b0ad3477f2178bc0b3eed26e4e6316f4e83aa1"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
result: ok(false),
sigop_count: 0,
},
// P2SH(P2PKH)
TestVector {
script_sig: &[
H("47"),
H(
"30440220781ba4f59a7b207a10db87628bc2168df4d59b844b397d2dbc9a5835fb2f2b7602206ed8fbcc1072fe2dfc5bb25909269e5dc42ffcae7ec2bc81d59692210ff30c2b01",
),
H("41"),
H(
"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
H("19"),
H("76a91491b24bf9f5288532960ac687abb035127b1d28a588ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("7f67f0521934a57d3039f77f9f32cf313f3ac74b"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
// FIXME: This should return `Ok(())`
result: ok(false),
sigop_count: 0,
},
// P2SH(P2PKH), bad sig but no VERIFY_P2SH
TestVector {
script_sig: &[
H("47"),
H(
"304402204e2eb034be7b089534ac9e798cf6a2c79f38bcb34d1b179efd6f2de0841735db022071461beb056b5a7be1819da6a3e3ce3662831ecc298419ca101eb6887b5dd6a401",
),
H("19"),
H("76a9147cf9c846cd4882efec4bf07e44ebdad495c94f4b88ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("2df519943d5acc0ef5222091f9dfe3543f489a82"),
O(EQUAL),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// P2SH(P2PKH), bad sig
TestVector {
script_sig: &[
H("47"),
H(
"304402204e2eb034be7b089534ac9e798cf6a2c79f38bcb34d1b179efd6f2de0841735db022071461beb056b5a7be1819da6a3e3ce3662831ecc298419ca101eb6887b5dd6a401",
),
H("19"),
H("76a9147cf9c846cd4882efec4bf07e44ebdad495c94f4b88ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("2df519943d5acc0ef5222091f9dfe3543f489a82"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
result: err(script::ComponentType::Redeem, script::Error::Interpreter(Some(opcode::PossiblyBad::from(EQUALVERIFY)), interpreter::Error::Verify)),
sigop_count: 0,
},
// 3-of-3
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501",
),
H("47"),
H(
"304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01",
),
H("47"),
H(
"304402200955d031fff71d8653221e85e36c3c85533d2312fc3045314b19650b7ae2f81002202a6bb8505e36201909d0921f01abff390ae6b7ff97bbf959f98aedeb0a56730901",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 3-of-3, 2 sigs
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501",
),
H("47"),
H(
"304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01",
),
N(0),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
result: ok(false),
sigop_count: 20,
},
// P2SH(2-of-3)
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402205b7d2c2f177ae76cfbbf14d589c113b0b35db753d305d5562dd0b61cbf366cfb02202e56f93c4f08a27f986cd424ffc48a462c3202c4902104d4d0ff98ed28f4bf8001",
),
H("47"),
H(
"30440220563e5b3b1fc11662a84bc5ea2a32cc3819703254060ba30d639a1aaf2d5068ad0220601c1f47ddc76d93284dd9ed68f7c9974c4a0ea7cbe8a247d6bc3878567a5fca01",
),
H("4c69"),
H(
"52210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179821038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f515082103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff464053ae",
),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("c9e4a896d149702d0d1695434feddd52e24ad78d"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 0,
},
// P2SH(2-of-3), 1 sig
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402205b7d2c2f177ae76cfbbf14d589c113b0b35db753d305d5562dd0b61cbf366cfb02202e56f93c4f08a27f986cd424ffc48a462c3202c4902104d4d0ff98ed28f4bf8001",
),
N(0),
H("4c69"),
H(
"52210279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179821038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f515082103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff464053ae",
),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("c9e4a896d149702d0d1695434feddd52e24ad78d"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
result: ok(false),
sigop_count: 0,
},
// P2PK with too much R padding
TestVector {
script_sig: &[
H("47"),
H(
"304402200060558477337b9022e70534f1fea71a318caf836812465a2509931c5e7c4987022078ec32bd50ac9e03a349ba953dfd9fe1c8d2dd8bdb1d38ddca844d3d5c78c11801",
),
],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![0, 96, 85, 132, 119, 51, 123, 144, 34, 231, 5, 52, 241, 254, 167, 26, 49, 140, 175, 131, 104, 18, 70, 90, 37, 9, 147, 28, 94, 124, 73, 135],
error: signature::InvalidDerInteger::LeadingNullByte
})))),
sigop_count: 1,
},
// P2PK with too much S padding
TestVector {
script_sig: &[
H("48"),
H(
"304502202de8c03fc525285c9c535631019a5f2af7c6454fa9eb392a3756a4917c420edd02210046130bf2baf7cfc065067c8b9e33a066d9c15edcea9feb0ca2d233e3597925b401",
),
],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "s",
value: vec![0, 70, 19, 11, 242, 186, 247, 207, 192, 101, 6, 124, 139, 158, 51, 160, 102, 217, 193, 94, 220, 234, 159, 235, 12, 162, 210, 51, 227, 89, 121, 37, 180],
error: signature::InvalidDerInteger::LeadingNullByte
})))),
sigop_count: 1,
},
// P2PK with too little R padding
TestVector {
script_sig: &[
H("47"),
H(
"30440220d7a0417c3f6d1a15094d1cf2a3378ca0503eb8a57630953a9e2987e21ddd0a6502207a6266d686c99090920249991d3d42065b6d43eb70187b219c0db82e4f94d1a201",
),
],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![215, 160, 65, 124, 63, 109, 26, 21, 9, 77, 28, 242, 163, 55, 140, 160, 80, 62, 184, 165, 118, 48, 149, 58, 158, 41, 135, 226, 29, 221, 10, 101],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 1,
},
// P2PK NOT with bad sig with too much R padding
TestVector {
script_sig: &[
H("47"),
H(
"30440220005ece1335e7f757a1a1f476a7fb5bd90964e8a022489f890614a04acfb734c002206c12b8294a6513c7710e8c82d3c23d75cdbfe83200eb7efb495701958501a5d601",
),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![0, 94, 206, 19, 53, 231, 247, 87, 161, 161, 244, 118, 167, 251, 91, 217, 9, 100, 232, 160, 34, 72, 159, 137, 6, 20, 160, 74, 207, 183, 52, 192],
error: signature::InvalidDerInteger::LeadingNullByte,
})))),
sigop_count: 1,
},
// P2PK NOT with too much R padding
TestVector {
script_sig: &[
H("47"),
H(
"30440220005ece1335e7f657a1a1f476a7fb5bd90964e8a022489f890614a04acfb734c002206c12b8294a6513c7710e8c82d3c23d75cdbfe83200eb7efb495701958501a5d601",
),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![0, 94, 206, 19, 53, 231, 246, 87, 161, 161, 244, 118, 167, 251, 91, 217, 9, 100, 232, 160, 34, 72, 159, 137, 6, 20, 160, 74, 207, 183, 52, 192],
error: signature::InvalidDerInteger::LeadingNullByte
})))),
sigop_count: 1,
},
// BIP66 example 1
TestVector {
script_sig: &[
H("47"),
H(
"30440220d7a0417c3f6d1a15094d1cf2a3378ca0503eb8a57630953a9e2987e21ddd0a6502207a6266d686c99090920249991d3d42065b6d43eb70187b219c0db82e4f94d1a201",
),
],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![215, 160, 65, 124, 63, 109, 26, 21, 9, 77, 28, 242, 163, 55, 140, 160, 80, 62, 184, 165, 118, 48, 149, 58, 158, 41, 135, 226, 29, 221, 10, 101],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 1,
},
// BIP66 example 2
TestVector {
script_sig: &[
H("47"),
H(
"304402208e43c0b91f7c1e5bc58e41c8185f8a6086e111b0090187968a86f2822462d3c902200a58f4076b1133b18ff1dc83ee51676e44c60cc608d9534e0df5ace0424fc0be01",
),
],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![142, 67, 192, 185, 31, 124, 30, 91, 197, 142, 65, 200, 24, 95, 138, 96, 134, 225, 17, 176, 9, 1, 135, 150, 138, 134, 242, 130, 36, 98, 211, 201],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 1,
},
// BIP66 example 3
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: ok(false),
sigop_count: 1,
},
// BIP66 example 4
TestVector {
script_sig: &[N(0)],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// BIP66 example 4, with non-null DER-compliant signature
TestVector {
script_sig: &[H("09"), H("300602010102010101")],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// BIP66 example 5
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::WrongType)))),
sigop_count: 1,
},
// BIP66 example 6
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::WrongType)))),
sigop_count: 1,
},
// BIP66 example 7
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"30440220cae00b1444babfbf6071b0ba8707f6bd373da3df494d6e74119b0430c5db810502205d5231b8c5939c8ff0c82242656d6e06edb073d42af336c99fe8837c36ea39d501",
),
H("47"),
H(
"3044022027c2714269ca5aeecc4d70edc88ba5ee0e3da4986e9216028f489ab4f1b8efce022022bd545b4951215267e4c5ceabd4c5350331b2e4a0b6494c56f361fa5a57a1a201",
),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should this be returning `SigDER(None)`?
result: ok(false),
sigop_count: 20,
},
// BIP66 example 8
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"30440220b119d67d389315308d1745f734a51ff3ec72e06081e84e236fdf9dc2f5d2a64802204b04e3bc38674c4422ea317231d642b56dc09d214a1ecbbf16ecca01ed996e2201",
),
H("47"),
H(
"3044022079ea80afd538d9ada421b5101febeb6bc874e01dde5bca108c1d0479aec339a4022004576db8f66130d1df686ccf00935703689d69cf539438da1edab208b0d63c4801",
),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Err(script::Error::EvalFalse)` (see #240).
result: ok(true),
sigop_count: 20,
},
// BIP66 example 9
TestVector {
script_sig: &[
N(0),
N(0),
H("47"),
H(
"3044022081aa9d436f2154e8b6d600516db03d78de71df685b585a9807ead4210bd883490220534bb6bdf318a419ac0749660b60e78d17d515558ef369bf872eff405b676b2e01",
),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![129, 170, 157, 67, 111, 33, 84, 232, 182, 214, 0, 81, 109, 176, 61, 120, 222, 113, 223, 104, 91, 88, 90, 152, 7, 234, 212, 33, 11, 216, 131, 73],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 20,
},
// BIP66 example 10
TestVector {
script_sig: &[
N(0),
N(0),
H("47"),
H(
"30440220da6f441dc3b4b2c84cfa8db0cd5b34ed92c9e01686de5a800d40498b70c0dcac02207c2cf91b0c32b860c4cd4994be36cfb84caf8bb7c3a8e4d96a31b2022c5299c501",
),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![218, 111, 68, 29, 195, 180, 178, 200, 76, 250, 141, 176, 205, 91, 52, 237, 146, 201, 224, 22, 134, 222, 90, 128, 13, 64, 73, 139, 112, 192, 220, 172],
error: signature::InvalidDerInteger::Negative
})))),
sigop_count: 20,
},
// BIP66 example 11
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"30440220cae00b1444babfbf6071b0ba8707f6bd373da3df494d6e74119b0430c5db810502205d5231b8c5939c8ff0c82242656d6e06edb073d42af336c99fe8837c36ea39d501",
),
N(0),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
result: ok(false),
sigop_count: 20,
},
// BIP66 example 12
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"30440220b119d67d389315308d1745f734a51ff3ec72e06081e84e236fdf9dc2f5d2a64802204b04e3bc38674c4422ea317231d642b56dc09d214a1ecbbf16ecca01ed996e2201",
),
N(0),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(2),
O(CHECKMULTISIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
// P2PK with multi-byte hashtype
TestVector {
script_sig: &[
H("48"),
H(
"304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb12510101",
),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::IncorrectLength { actual: 69, expected: 68 })))),
sigop_count: 1,
},
// P2PK with high S but no LOW_S
TestVector {
script_sig: &[
H("48"),
H(
"304502203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022100ab1e3da73d67e32045a20e0b999e049978ea8d6ee5480d485fcf2ce0d03b2ef001",
),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK with high S
TestVector {
script_sig: &[
H("48"),
H(
"304502203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022100ab1e3da73d67e32045a20e0b999e049978ea8d6ee5480d485fcf2ce0d03b2ef001",
),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
],
flags: interpreter::Flags::LowS,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::SigHighS))),
sigop_count: 1,
},
// P2PK with hybrid pubkey but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"3044022057292e2d4dfe775becdd0a9e6547997c728cdf35390f6a017da56d654d374e4902206b643be2fc53763b4e284845bfea2c597d2dc7759941dce937636c9d341b71ed01",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK with hybrid pubkey
TestVector {
script_sig: &[
H("47"),
H(
"3044022057292e2d4dfe775becdd0a9e6547997c728cdf35390f6a017da56d654d374e4902206b643be2fc53763b4e284845bfea2c597d2dc7759941dce937636c9d341b71ed01",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::PubKeyType)),
sigop_count: 1,
},
// P2PK NOT with hybrid pubkey but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"30440220035d554e3153c14950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Err(script::Error::EvalFalse)` (see #240).
result: ok(true),
sigop_count: 1,
},
// P2PK NOT with hybrid pubkey
TestVector {
script_sig: &[
H("47"),
H(
"30440220035d554e3153c14950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::PubKeyType)),
sigop_count: 1,
},
// P2PK NOT with invalid hybrid pubkey but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"30440220035d554e3153c04950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// P2PK NOT with invalid hybrid pubkey
TestVector {
script_sig: &[
H("47"),
H(
"30440220035d554e3153c04950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::PubKeyType)),
sigop_count: 1,
},
// 1-of-2 with the second 1 hybrid pubkey and no STRICTENC
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402202e79441ad1baf5a07fb86bae3753184f6717d9692680947ea8b6e8b777c69af1022079a262e13d868bb5a0964fefe3ba26942e1b0669af1afb55ef3344bc9d4fc4c401",
),
],
script_pubkey: &[
N(1),
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 1-of-2 with the second 1 hybrid pubkey
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402202e79441ad1baf5a07fb86bae3753184f6717d9692680947ea8b6e8b777c69af1022079a262e13d868bb5a0964fefe3ba26942e1b0669af1afb55ef3344bc9d4fc4c401",
),
],
script_pubkey: &[
N(1),
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::StrictEnc,
// FIXME: This should return `Ok(())`
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::PubKeyType)),
sigop_count: 20,
},
// 1-of-2 with the first 1 hybrid pubkey
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"3044022079c7824d6c868e0e1a273484e28c2654a27d043c8a27f49f52cb72efed0759090220452bbbf7089574fa082095a4fc1b3a16bafcf97a3a34d745fafc922cce66b27201",
),
],
script_pubkey: &[
N(1),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
N(2),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::PubKeyType)),
sigop_count: 20,
},
// P2PK with undefined hashtype but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"304402206177d513ec2cda444c021a1f4f656fc4c72ba108ae063e157eb86dc3575784940220666fc66702815d0e5413bb9b1df22aed44f5f1efb8b99d41dd5dc9a5be6d205205",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK with undefined hashtype
TestVector {
script_sig: &[
H("47"),
H(
"304402206177d513ec2cda444c021a1f4f656fc4c72ba108ae063e157eb86dc3575784940220666fc66702815d0e5413bb9b1df22aed44f5f1efb8b99d41dd5dc9a5be6d205205",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidHashType::ExtraBitsSet(4))))),
sigop_count: 1,
},
// P2PK NOT with invalid sig and undefined hashtype but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"304402207409b5b320296e5e2136a7b281a7f803028ca4ca44e2b83eebd46932677725de02202d4eea1c8d3c98e6f42614f54764e6e5e6542e213eb4d079737e9a8b6e9812ec05",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// P2PK NOT with invalid sig and undefined hashtype
TestVector {
script_sig: &[
H("47"),
H(
"304402207409b5b320296e5e2136a7b281a7f803028ca4ca44e2b83eebd46932677725de02202d4eea1c8d3c98e6f42614f54764e6e5e6542e213eb4d079737e9a8b6e9812ec05",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
O(NOT),
],
flags: interpreter::Flags::StrictEnc,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidHashType::ExtraBitsSet(4))))),
sigop_count: 1,
},
// 3-of-3 with nonzero dummy but no NULLDUMMY
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501",
),
H("47"),
H(
"304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01",
),
H("47"),
H(
"304402200955d031fff71d8653221e85e36c3c85533d2312fc3045314b19650b7ae2f81002202a6bb8505e36201909d0921f01abff390ae6b7ff97bbf959f98aedeb0a56730901",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 3-of-3 with nonzero dummy
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501",
),
H("47"),
H(
"304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01",
),
H("47"),
H(
"304402200955d031fff71d8653221e85e36c3c85533d2312fc3045314b19650b7ae2f81002202a6bb8505e36201909d0921f01abff390ae6b7ff97bbf959f98aedeb0a56730901",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::NullDummy,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::SigNullDummy)),
sigop_count: 20,
},
// 3-of-3 NOT with invalid sig and nonzero dummy but no NULLDUMMY
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"304402201bb2edab700a5d020236df174fefed78087697143731f659bea59642c759c16d022061f42cdbae5bcd3e8790f20bf76687443436e94a634321c16a72aa54cbc7c2ea01",
),
H("47"),
H(
"304402204bb4a64f2a6e5c7fb2f07fef85ee56fde5e6da234c6a984262307a20e99842d702206f8303aaba5e625d223897e2ffd3f88ef1bcffef55f38dc3768e5f2e94c923f901",
),
H("47"),
H(
"3044022040c2809b71fffb155ec8b82fe7a27f666bd97f941207be4e14ade85a1249dd4d02204d56c85ec525dd18e29a0533d5ddf61b6b1bb32980c2f63edf951aebf7a27bfe01",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
// 3-of-3 NOT with invalid sig with nonzero dummy
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"304402201bb2edab700a5d020236df174fefed78087697143731f659bea59642c759c16d022061f42cdbae5bcd3e8790f20bf76687443436e94a634321c16a72aa54cbc7c2ea01",
),
H("47"),
H(
"304402204bb4a64f2a6e5c7fb2f07fef85ee56fde5e6da234c6a984262307a20e99842d702206f8303aaba5e625d223897e2ffd3f88ef1bcffef55f38dc3768e5f2e94c923f901",
),
H("47"),
H(
"3044022040c2809b71fffb155ec8b82fe7a27f666bd97f941207be4e14ade85a1249dd4d02204d56c85ec525dd18e29a0533d5ddf61b6b1bb32980c2f63edf951aebf7a27bfe01",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
O(NOT),
],
flags: interpreter::Flags::NullDummy,
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::SigNullDummy)),
sigop_count: 20,
},
// 2-of-2 with two identical keys and sigs pushed using OP_DUP but no SIGPUSHONLY
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901",
),
O(DUP),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 2-of-2 with two identical keys and sigs pushed using OP_DUP
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901",
),
O(DUP),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::SigPushOnly,
result: err(script::ComponentType::Sig, script::Error::SigPushOnly),
sigop_count: 20,
},
// P2SH(P2PK) with non-push scriptSig but no P2SH or SIGPUSHONLY
TestVector {
script_sig: &[
H("47"),
H(
"3044022057292e2d4dfe775becdd0a9e6547997c728cdf35390f6a017da56d654d374e4902206b643be2fc53763b4e284845bfea2c597d2dc7759941dce937636c9d341b71ed01",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK NOT with invalid hybrid pubkey but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"30440220035d554e3153c04950c9993f41c496607a8e24093db0595be7bf875cf64fcf1f02204731c8c4e5daf15e706cec19cdd8f2c5b1d05490e11dab8465ed426569b6e92101",
),
],
script_pubkey: &[
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// 1-of-2 with the second 1 hybrid pubkey and no STRICTENC
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402202e79441ad1baf5a07fb86bae3753184f6717d9692680947ea8b6e8b777c69af1022079a262e13d868bb5a0964fefe3ba26942e1b0669af1afb55ef3344bc9d4fc4c401",
),
],
script_pubkey: &[
N(1),
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 1-of-2 with the second 1 hybrid pubkey
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402202e79441ad1baf5a07fb86bae3753184f6717d9692680947ea8b6e8b777c69af1022079a262e13d868bb5a0964fefe3ba26942e1b0669af1afb55ef3344bc9d4fc4c401",
),
],
script_pubkey: &[
N(1),
H("41"),
H(
"0679be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::StrictEnc,
// FIXME: Should return `Ok(())` (see #240).
result: err(script::ComponentType::PubKey, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKMULTISIG)), interpreter::Error::PubKeyType)),
sigop_count: 20,
},
// P2PK with undefined hashtype but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"304402206177d513ec2cda444c021a1f4f656fc4c72ba108ae063e157eb86dc3575784940220666fc66702815d0e5413bb9b1df22aed44f5f1efb8b99d41dd5dc9a5be6d205205",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK NOT with invalid sig and undefined hashtype but no STRICTENC
TestVector {
script_sig: &[
H("47"),
H(
"304402207409b5b320296e5e2136a7b281a7f803028ca4ca44e2b83eebd46932677725de02202d4eea1c8d3c98e6f42614f54764e6e5e6542e213eb4d079737e9a8b6e9812ec05",
),
],
script_pubkey: &[
H("41"),
H(
"048282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f5150811f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf",
),
O(CHECKSIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 1,
},
// 3-of-3 with nonzero dummy but no NULLDUMMY
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"3044022051254b9fb476a52d85530792b578f86fea70ec1ffb4393e661bcccb23d8d63d3022076505f94a403c86097841944e044c70c2045ce90e36de51f7e9d3828db98a07501",
),
H("47"),
H(
"304402200a358f750934b3feb822f1966bfcd8bbec9eeaa3a8ca941e11ee5960e181fa01022050bf6b5a8e7750f70354ae041cb68a7bade67ec6c3ab19eb359638974410626e01",
),
H("47"),
H(
"304402200955d031fff71d8653221e85e36c3c85533d2312fc3045314b19650b7ae2f81002202a6bb8505e36201909d0921f01abff390ae6b7ff97bbf959f98aedeb0a56730901",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// 3-of-3 NOT with invalid sig and nonzero dummy but no NULLDUMMY
TestVector {
script_sig: &[
N(1),
H("47"),
H(
"304402201bb2edab700a5d020236df174fefed78087697143731f659bea59642c759c16d022061f42cdbae5bcd3e8790f20bf76687443436e94a634321c16a72aa54cbc7c2ea01",
),
H("47"),
H(
"304402204bb4a64f2a6e5c7fb2f07fef85ee56fde5e6da234c6a984262307a20e99842d702206f8303aaba5e625d223897e2ffd3f88ef1bcffef55f38dc3768e5f2e94c923f901",
),
H("47"),
H(
"3044022040c2809b71fffb155ec8b82fe7a27f666bd97f941207be4e14ade85a1249dd4d02204d56c85ec525dd18e29a0533d5ddf61b6b1bb32980c2f63edf951aebf7a27bfe01",
),
],
script_pubkey: &[
N(3),
H("21"),
H("0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
N(3),
O(CHECKMULTISIG),
O(NOT),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 20,
},
// 2-of-2 with two identical keys and sigs pushed using OP_DUP but no SIGPUSHONLY
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901",
),
O(DUP),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// P2SH(P2PK) with non-push scriptSig but no P2SH or SIGPUSHONLY
TestVector {
script_sig: &[
H("47"),
H(
"3044022018a2a81a93add5cb5f5da76305718e4ea66045ec4888b28d84cb22fae7f4645b02201e6daa5ed5d2e4b2b2027cf7ffd43d8d9844dd49f74ef86899ec8e669dfd39aa01",
),
O(NOP8),
H("23"),
H("2103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("215640c2f72f0d16b4eced26762035a42ffed39a"),
O(EQUAL),
],
flags: EMPTY_FLAGS,
result: ok(true),
sigop_count: 0,
},
// P2PK with non-push scriptSig but with P2SH validation
TestVector {
script_sig: &[
H("47"),
H(
"304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb125101",
),
O(NOP8),
],
script_pubkey: &[
H("21"),
H("03363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640"),
O(CHECKSIG),
],
flags: EMPTY_FLAGS,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2SH(P2PK) with non-push scriptSig but no SIGPUSHONLY
TestVector {
script_sig: &[
H("47"),
H(
"304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb125101",
),
O(NOP8),
H("23"),
H("2103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("215640c2f72f0d16b4eced26762035a42ffed39a"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
result: err(script::ComponentType::Sig, script::Error::SigPushOnly),
sigop_count: 0,
},
// P2SH(P2PK) with non-push scriptSig but not P2SH
TestVector {
script_sig: &[
H("47"),
H(
"304402203e4516da7253cf068effec6b95c41221c0cf3a8e6ccb8cbf1725b562e9afde2c022054e1c258c2981cdfba5df1f46661fb6541c44f77ca0092f3600331abfffb125101",
),
O(NOP8),
H("23"),
H("2103363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640ac"),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("215640c2f72f0d16b4eced26762035a42ffed39a"),
O(EQUAL),
],
flags: interpreter::Flags::SigPushOnly,
result: err(script::ComponentType::Sig, script::Error::SigPushOnly),
sigop_count: 0,
},
// 2-of-2 with two identical keys and sigs pushed
TestVector {
script_sig: &[
N(0),
H("47"),
H(
"304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901",
),
H("47"),
H(
"304402200abeb4bd07f84222f474aed558cfbdfc0b4e96cde3c2935ba7098b1ff0bd74c302204a04c1ca67b2a20abee210cf9a21023edccbbf8024b988812634233115c6b73901",
),
],
script_pubkey: &[
N(2),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
H("21"),
H("038282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508"),
N(2),
O(CHECKMULTISIG),
],
flags: interpreter::Flags::SigPushOnly,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 20,
},
// P2PK with unnecessary input but no CLEANSTACK
TestVector {
script_sig: &[
N(11),
H("47"),
H(
"304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
),
],
script_pubkey: &[
H("41"),
H(
"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: interpreter::Flags::P2SH,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 1,
},
// P2PK with unnecessary input
TestVector {
script_sig: &[
N(11),
H("47"),
H(
"304402200a5c6163f07b8d3b013c4d1d6dba25e780b39658d79ba37af7057a3b7f15ffa102201fd9b4eaa9943f734928b99a83592c2e7bf342ea2680f6a2bb705167966b742001",
),
],
script_pubkey: &[
H("41"),
H(
"0479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",
),
O(CHECKSIG),
],
flags: interpreter::Flags::CleanStack.union(interpreter::Flags::P2SH),
result: ok(false),
sigop_count: 1,
},
// P2SH with unnecessary input but no CLEANSTACK
TestVector {
script_sig: &[
N(11),
H("47"),
H(
"304402202f7505132be14872581f35d74b759212d9da40482653f1ffa3116c3294a4a51702206adbf347a2240ca41c66522b1a22a41693610b76a8e7770645dc721d1635854f01",
),
H("43"),
H(
"410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("31edc23bdafda4639e669f89ad6b2318dd79d032"),
O(EQUAL),
],
flags: interpreter::Flags::P2SH,
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 0,
},
// P2SH with unnecessary input
TestVector {
script_sig: &[
N(11),
H("47"),
H(
"304402202f7505132be14872581f35d74b759212d9da40482653f1ffa3116c3294a4a51702206adbf347a2240ca41c66522b1a22a41693610b76a8e7770645dc721d1635854f01",
),
H("43"),
H(
"410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("31edc23bdafda4639e669f89ad6b2318dd79d032"),
O(EQUAL),
],
flags: interpreter::Flags::CleanStack.union(interpreter::Flags::P2SH),
result: ok(false),
sigop_count: 0,
},
// P2SH with CLEANSTACK
TestVector {
script_sig: &[
H("47"),
H(
"304402202f7505132be14872581f35d74b759212d9da40482653f1ffa3116c3294a4a51702206adbf347a2240ca41c66522b1a22a41693610b76a8e7770645dc721d1635854f01",
),
H("43"),
H(
"410479be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8ac",
),
],
script_pubkey: &[
O(HASH160),
H("14"),
H("31edc23bdafda4639e669f89ad6b2318dd79d032"),
O(EQUAL),
],
flags: interpreter::Flags::CleanStack.union(interpreter::Flags::P2SH),
// FIXME: Should return `Ok(())` (see #240).
result: ok(false),
sigop_count: 0,
},
// Zcash-specific tests
// 201 opcodes followed by a disabled opcode. This hits an edge case where the Rust impl will
// first complain about the disabled opcode, but the C++ impl will first complain about the
// op_count overflow. Mostly this ensures we’re normalizing those cases to the same thing.
TestVector {
script_sig: &[N(1)],
script_pubkey: &[
H(
"616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161",
),
D(OP_CAT),
],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::PubKey, script::Error::from(opcode::Error::Disabled(Some(OP_CAT)))),
sigop_count: 0,
},
// The `OP_CHECKSIG` signature has a length that points past the end of the signature.
TestVector {
script_sig: &[H("0A"), H("30070231000000000000"), O(_0), O(CHECKSIG)],
script_pubkey: &[],
flags: DEFAULT_FLAGS,
result: err(script::ComponentType::Sig, script::Error::Interpreter(Some(opcode::PossiblyBad::from(CHECKSIG)), interpreter::Error::from(signature::Error::from(signature::InvalidDerEncoding::InvalidComponent {
name: "r",
value: vec![0, 0, 0, 0, 0],
error: signature::InvalidDerInteger::IncorrectLength { actual: 5, expected: 49 }
})))),
sigop_count: 0,
},
]
}