diff --git a/changelog.d/script-corpus.md b/changelog.d/script-corpus.md new file mode 100644 index 000000000..fb8a2930c --- /dev/null +++ b/changelog.d/script-corpus.md @@ -0,0 +1,3 @@ +Added + +- **A script corpus runs beside Bitcoin Core's JSON and is checked against Core v31.1 VerifyScript.** diff --git a/crates/rbitcoin-consensus/Cargo.toml b/crates/rbitcoin-consensus/Cargo.toml index 523600d27..b8c38c8d0 100644 --- a/crates/rbitcoin-consensus/Cargo.toml +++ b/crates/rbitcoin-consensus/Cargo.toml @@ -7,11 +7,17 @@ rust-version.workspace = true repository.workspace = true description = "Block and transaction validation / confirmability" +[features] +# Lets script-oracle call the Core script assembler. Off for the node. +corpus = ["dep:serde_json"] + [dependencies] rbitcoin-primitives = { workspace = true } arc-swap = { workspace = true } bitcoin = { workspace = true } bitcoin_hashes = { workspace = true } +# Corpus rows are JSON. The node build leaves this feature off. +serde_json = { workspace = true, optional = true } # Attribute only. cargo-mutants reads it; it does not change compiled code. mutants = "0.0.4" # Parallel script checks use in-crate `script_pool` (std threads) — no rayon. diff --git a/crates/rbitcoin-consensus/src/lib.rs b/crates/rbitcoin-consensus/src/lib.rs index e6143c11c..6c9147af7 100644 --- a/crates/rbitcoin-consensus/src/lib.rs +++ b/crates/rbitcoin-consensus/src/lib.rs @@ -10,6 +10,8 @@ mod params; pub mod policy; mod regtest_pad; mod script; +#[cfg(feature = "corpus")] +pub use script::core_script; pub mod script_pool; mod signet; pub mod silent_payments; diff --git a/crates/rbitcoin-consensus/src/script/classify.rs b/crates/rbitcoin-consensus/src/script/classify.rs index b851390d5..51fb0f304 100644 --- a/crates/rbitcoin-consensus/src/script/classify.rs +++ b/crates/rbitcoin-consensus/src/script/classify.rs @@ -49,9 +49,6 @@ pub(crate) fn witness_program(script: &Script) -> Option<(u8, &[u8])> { if b.len() != 2 + push_len { return None; } - if b[1] != push_len as u8 { - return None; - } Some((version, &b[2..])) } diff --git a/crates/rbitcoin-consensus/src/script/core_script.rs b/crates/rbitcoin-consensus/src/script/core_script.rs index 521084ac9..777006d65 100644 --- a/crates/rbitcoin-consensus/src/script/core_script.rs +++ b/crates/rbitcoin-consensus/src/script/core_script.rs @@ -1,11 +1,11 @@ //! Shared Core script-language assembler and hex decode (unit-test only). -pub(crate) fn decode_hex(s: &str) -> Result, String> { +pub fn decode_hex(s: &str) -> Result, String> { rbitcoin_primitives::hex_decode(s.trim()).map_err(|e| e.to_string()) } /// Assemble Core script string ("1 2 ADD", "0x4c 0x01 0x07", "'Az'") to bytes. -pub(crate) fn assemble_script(src: &str) -> Result, String> { +pub fn assemble_script(src: &str) -> Result, String> { let mut out = Vec::new(); let mut i = 0; let b = src.as_bytes(); @@ -329,9 +329,191 @@ fn opcode_byte(name: &str) -> Option { None } +/// `scriptPubKey` cell, including Core's `#TAPROOTOUTPUT#` placeholder. +pub fn assemble_script_pubkey(src: &str, tap_out: Option<[u8; 32]>) -> Result, String> { + if src.trim() == "0x51 0x20 #TAPROOTOUTPUT#" { + let out = tap_out.ok_or_else(|| "#TAPROOTOUTPUT# without control block".to_string())?; + let mut b = vec![0x51, 0x20]; + b.extend_from_slice(&out); + return Ok(b); + } + assemble_script(src) +} + +/// Control block and tweaked output key for one tapscript leaf. +/// +/// Internal key is Core `script_tests.cpp` `vchKey0`: 31 zero bytes, then `0x01`. +pub fn taproot_leaf_control(leaf: &[u8]) -> Result<(Vec, [u8; 32]), String> { + use bitcoin::secp256k1::{Keypair, Secp256k1, SecretKey}; + use bitcoin::taproot::{LeafVersion, TaprootBuilder}; + + let secp = Secp256k1::new(); + let mut sk_bytes = [0u8; 32]; + sk_bytes[31] = 1; + let sk = SecretKey::from_slice(&sk_bytes).map_err(|e| format!("taproot internal sk: {e}"))?; + let kp = Keypair::from_secret_key(&secp, &sk); + let (internal_xonly, _) = kp.x_only_public_key(); + let leaf_script = bitcoin::script::ScriptBuf::from_bytes(leaf.to_vec()); + let builder = TaprootBuilder::new() + .add_leaf(0, leaf_script.clone()) + .map_err(|e| format!("taproot add_leaf: {e:?}"))?; + let spend_info = builder + .finalize(&secp, internal_xonly) + .map_err(|e| format!("taproot finalize: {e:?}"))?; + let control = spend_info + .control_block(&(leaf_script, LeafVersion::TapScript)) + .ok_or_else(|| "taproot control_block missing".to_string())?; + let output = spend_info.output_key().to_x_only_public_key().serialize(); + Ok((control.serialize(), output)) +} + +/// Spend-transaction fields both corpus runners share. +/// +/// Defaults match Core `script_tests.cpp`: version 1, locktime 0, sequence +/// `0xffffffff`, one empty output. `version` is the consensus `i32` bit +/// pattern (`4294967295` and `-1` are the same bits). +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub struct SpendShape { + pub version: i32, + pub lock_time: u32, + pub sequence: u32, + pub n_outputs: usize, +} + +impl Default for SpendShape { + fn default() -> Self { + Self { + version: 1, + lock_time: 0, + sequence: u32::MAX, + n_outputs: 1, + } + } +} + +/// Optional `"spend"` object on a corpus row. Missing object keeps [`SpendShape::default`]. +pub fn spend_shape_from_json(v: Option<&serde_json::Value>) -> Result { + let Some(v) = v.filter(|v| !v.is_null()) else { + return Ok(SpendShape::default()); + }; + let obj = v.as_object().ok_or("spend must be an object")?; + let mut shape = SpendShape::default(); + if let Some(n) = obj.get("version") { + let bits = n.as_i64().ok_or("spend.version")?; + shape.version = bits as i32; + } + if let Some(n) = obj.get("locktime") { + shape.lock_time = u32_field(n, "spend.locktime")?; + } + if let Some(n) = obj.get("sequence") { + shape.sequence = u32_field(n, "spend.sequence")?; + } + if let Some(n) = obj.get("n_outputs") { + let u = n.as_u64().ok_or("spend.n_outputs")?; + shape.n_outputs = usize::try_from(u).map_err(|_| "spend.n_outputs")?; + } + Ok(shape) +} + +fn u32_field(n: &serde_json::Value, name: &str) -> Result { + let u = n.as_u64().ok_or(name)?; + u32::try_from(u).map_err(|_| name.to_string()) +} + +/// Core `script_tests.cpp` credit transaction plus the spend under test. +/// +/// Credit stays version 1, locktime 0, two `OP_0` pushes, sequence max, one +/// output. `shape` applies to the spend only (script locktime and sequence +/// read that transaction). +pub fn credit_and_spend( + script_pubkey: bitcoin::ScriptBuf, + script_sig: bitcoin::ScriptBuf, + witness: bitcoin::Witness, + amount: bitcoin::Amount, + shape: SpendShape, +) -> (bitcoin::Transaction, bitcoin::Transaction) { + use bitcoin::absolute::LockTime; + use bitcoin::transaction::Version; + use bitcoin::{OutPoint, Sequence, Transaction, TxIn, TxOut}; + + let credit = Transaction { + version: Version::ONE, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: bitcoin::ScriptBuf::from_bytes(vec![0x00, 0x00]), + sequence: Sequence::MAX, + witness: bitcoin::Witness::new(), + }], + output: vec![TxOut { + value: amount, + script_pubkey: script_pubkey.clone(), + }], + }; + let spend = Transaction { + version: Version(shape.version), + lock_time: LockTime::from_consensus(shape.lock_time), + input: vec![TxIn { + previous_output: OutPoint { + txid: credit.compute_txid(), + vout: 0, + }, + script_sig, + sequence: Sequence::from_consensus(shape.sequence), + witness, + }], + output: std::iter::repeat_with(|| TxOut { + value: amount, + script_pubkey: bitcoin::ScriptBuf::new(), + }) + .take(shape.n_outputs) + .collect(), + }; + (credit, spend) +} + +/// One Core `script_tests` witness string (`#SCRIPT#`, `#CONTROLBLOCK#`, or hex). +pub fn push_core_witness_token( + stack: &mut Vec>, + tap_out: &mut Option<[u8; 32]>, + token: &str, +) -> Result<(), String> { + if token.is_empty() { + stack.push(vec![]); + return Ok(()); + } + if let Some(rest) = token.strip_prefix("#SCRIPT#") { + stack.push(assemble_script(rest.trim())?); + return Ok(()); + } + if token == "#CONTROLBLOCK#" { + let leaf = stack + .last() + .ok_or_else(|| "#CONTROLBLOCK# without leaf script".to_string())? + .clone(); + let (control, output) = taproot_leaf_control(&leaf)?; + stack.push(control); + *tap_out = Some(output); + return Ok(()); + } + let hex = token.trim_start_matches("0x").trim_start_matches("0X"); + if !hex.len().is_multiple_of(2) { + return Err(format!("odd witness hex: {token}")); + } + if !hex.chars().all(|c| c.is_ascii_hexdigit()) { + return Err(format!("witness is not hex: {token}")); + } + let mut bytes = Vec::with_capacity(hex.len() / 2); + for j in (0..hex.len()).step_by(2) { + bytes.push(u8::from_str_radix(&hex[j..j + 2], 16).map_err(|e| e.to_string())?); + } + stack.push(bytes); + Ok(()) +} + #[cfg(test)] mod tests { - use super::decode_hex; + use super::{decode_hex, spend_shape_from_json, SpendShape}; #[test] fn decode_hex_strips_0x_and_names_odd_length() { @@ -340,4 +522,20 @@ mod tests { assert_eq!(decode_hex("abc").unwrap_err(), "odd hex length"); assert_eq!(decode_hex("zz").unwrap_err(), "invalid hex digit"); } + + #[test] + fn spend_shape_defaults_and_unsigned_version_bits() { + assert_eq!(spend_shape_from_json(None).unwrap(), SpendShape::default()); + let row = serde_json::json!({ + "version": 4294967295u32, + "locktime": 500_000_000, + "sequence": 0, + "n_outputs": 0 + }); + let shape = spend_shape_from_json(Some(&row)).unwrap(); + assert_eq!(shape.version, -1); + assert_eq!(shape.lock_time, 500_000_000); + assert_eq!(shape.sequence, 0); + assert_eq!(shape.n_outputs, 0); + } } diff --git a/crates/rbitcoin-consensus/src/script/core_vectors.rs b/crates/rbitcoin-consensus/src/script/core_vectors.rs index cc6951ddc..1538b9e03 100644 --- a/crates/rbitcoin-consensus/src/script/core_vectors.rs +++ b/crates/rbitcoin-consensus/src/script/core_vectors.rs @@ -7,14 +7,13 @@ #![cfg(test)] -use super::core_script::assemble_script as assemble; +use super::core_script::{assemble_script as assemble, credit_and_spend, SpendShape}; use super::interpreter::{self, EvalContext, SigVersion}; use super::verify_job_all_inputs; use crate::block::{JobTx, ScriptCheckJob}; -use bitcoin::absolute::LockTime; use bitcoin::hashes::Hash; use bitcoin::script::Script; -use bitcoin::{Amount, OutPoint, ScriptBuf, Sequence, Transaction, TxIn, TxOut, Witness}; +use bitcoin::{Amount, ScriptBuf, Transaction, Witness}; use serde_json::Value; fn load_json() -> Value { @@ -166,47 +165,6 @@ fn apply_eval_flags(ctx: &mut EvalContext<'_>, flags: &CoreFlags) { } } -// ── Credit / spend template (matches Core script_tests.cpp) ───────────────── - -fn build_credit(script_pubkey: ScriptBuf, value: Amount) -> Transaction { - // CScript() << CScriptNum(0) << CScriptNum(0) → two OP_0 pushes. - Transaction { - version: bitcoin::transaction::Version::ONE, - lock_time: LockTime::ZERO, - input: vec![TxIn { - previous_output: OutPoint::null(), - script_sig: ScriptBuf::from_bytes(vec![0x00, 0x00]), - sequence: Sequence::MAX, - witness: Witness::new(), - }], - output: vec![TxOut { - value, - script_pubkey, - }], - } -} - -fn build_spend(credit: &Transaction, script_sig: ScriptBuf, witness: Witness) -> Transaction { - let credit_txid = credit.compute_txid(); - Transaction { - version: bitcoin::transaction::Version::ONE, - lock_time: LockTime::ZERO, - input: vec![TxIn { - previous_output: OutPoint { - txid: credit_txid, - vout: 0, - }, - script_sig, - sequence: Sequence::MAX, - witness, - }], - output: vec![TxOut { - value: credit.output[0].value, - script_pubkey: ScriptBuf::new(), - }], - } -} - /// Core script_tests witness cell: hex items + optional `#SCRIPT#` / `#CONTROLBLOCK#`, /// ending with nValue (BTC). Returns optional Taproot output key for `#TAPROOTOUTPUT#`. fn parse_witness_and_amount(first: &Value) -> Result<(Witness, Amount, Option<[u8; 32]>), String> { @@ -220,14 +178,6 @@ fn parse_witness_and_amount(first: &Value) -> Result<(Witness, Amount, Option<[u let mut amount = Amount::ZERO; let mut stack: Vec> = Vec::new(); let mut taproot_output: Option<[u8; 32]> = None; - // Core KeyData::key0 secret: 31 zero bytes + 0x01 (script_tests.cpp vchKey0). - let secp = bitcoin::secp256k1::Secp256k1::new(); - let mut sk_bytes = [0u8; 32]; - sk_bytes[31] = 1; - let sk = bitcoin::secp256k1::SecretKey::from_slice(&sk_bytes) - .map_err(|e| format!("taproot internal sk: {e}"))?; - let kp = bitcoin::secp256k1::Keypair::from_secret_key(&secp, &sk); - let (internal_xonly, _) = kp.x_only_public_key(); for (i, cell) in arr.iter().enumerate() { if let Some(n) = cell.as_f64() { @@ -239,49 +189,7 @@ fn parse_witness_and_amount(first: &Value) -> Result<(Witness, Amount, Option<[u } } if let Some(s) = cell.as_str() { - if s.is_empty() { - stack.push(vec![]); - continue; - } - // Core: `#SCRIPT# ` → assemble leaf, push as witness element. - if let Some(rest) = s.strip_prefix("#SCRIPT#") { - let script_bytes = assemble(rest.trim())?; - stack.push(script_bytes); - continue; - } - // Core: `#CONTROLBLOCK#` — single-leaf tree with key0 internal key. - if s == "#CONTROLBLOCK#" { - let leaf = stack - .last() - .ok_or_else(|| "#CONTROLBLOCK# without leaf script".to_string())? - .clone(); - let leaf_script = ScriptBuf::from_bytes(leaf); - let builder = bitcoin::taproot::TaprootBuilder::new() - .add_leaf(0, leaf_script.clone()) - .map_err(|e| format!("taproot add_leaf: {e:?}"))?; - let spend_info = builder - .finalize(&secp, internal_xonly) - .map_err(|e| format!("taproot finalize: {e:?}"))?; - let control = spend_info - .control_block(&(leaf_script, bitcoin::taproot::LeafVersion::TapScript)) - .ok_or_else(|| "taproot control_block missing".to_string())?; - stack.push(control.serialize()); - taproot_output = Some(spend_info.output_key().to_x_only_public_key().serialize()); - continue; - } - let hex = s.trim_start_matches("0x").trim_start_matches("0X"); - if !hex.len().is_multiple_of(2) { - return Err(format!("odd witness hex: {s}")); - } - // Non-hex tokens (that are not special flags) are hard errors in Core. - if !hex.chars().all(|c| c.is_ascii_hexdigit()) { - return Err(format!("witness is not hex: {s}")); - } - let mut bytes = Vec::with_capacity(hex.len() / 2); - for j in (0..hex.len()).step_by(2) { - bytes.push(u8::from_str_radix(&hex[j..j + 2], 16).map_err(|e| e.to_string())?); - } - stack.push(bytes); + super::core_script::push_core_witness_token(&mut stack, &mut taproot_output, s)?; } else if let Some(n) = cell.as_f64() { let sats = (n * 100_000_000.0).round() as i64; amount = Amount::from_sat(sats.max(0) as u64); @@ -348,6 +256,7 @@ fn run_script_row( witness: Witness, amount: Amount, flags: &CoreFlags, + shape: SpendShape, ) -> Result<(), String> { // DISCOURAGE: NOP1/4–10 outside IF regions (see has_discouraged_nop_outside_if). if flags.discourage_upgradable_nops @@ -363,21 +272,16 @@ fn run_script_row( .map_err(|_| "SIG_PUSHONLY".to_string())?; } - let spk = ScriptBuf::from_bytes(script_pubkey.to_vec()); - let credit = build_credit(spk.clone(), amount); - let mut spend = build_spend(&credit, ScriptBuf::from_bytes(script_sig.to_vec()), witness); - let prev = TxOut { - value: amount, - script_pubkey: credit.output[0].script_pubkey.clone(), - }; - spend.input[0].previous_output = OutPoint { - txid: credit.compute_txid(), - vout: 0, - }; - // Without SCRIPT_VERIFY_WITNESS, Core treats v0/v1 programs as bare scripts. // Production always enables witness post-segwit; flag-off is Core-vector only. if !flags.witness { + let (_credit, spend) = credit_and_spend( + ScriptBuf::from_bytes(script_pubkey.to_vec()), + ScriptBuf::from_bytes(script_sig.to_vec()), + witness, + amount, + shape, + ); return eval_bare_pair( &spend, script_sig, @@ -388,7 +292,30 @@ fn run_script_row( ); } - let job = ScriptCheckJob { + let job = script_row_job(script_sig, script_pubkey, witness, amount, flags, shape); + verify_job_all_inputs(&job).map_err(|e| format!("{e}")) +} + +/// Credit/spend job the witness branch of `run_script_row` feeds to +/// [`verify_job_all_inputs`]. The fast-path test calls the typed verifiers +/// on this same builder. Flag-off rows use [`eval_bare_pair`] instead. +fn script_row_job( + script_sig: &[u8], + script_pubkey: &[u8], + witness: Witness, + amount: Amount, + flags: &CoreFlags, + shape: SpendShape, +) -> ScriptCheckJob { + let (credit, spend) = credit_and_spend( + ScriptBuf::from_bytes(script_pubkey.to_vec()), + ScriptBuf::from_bytes(script_sig.to_vec()), + witness, + amount, + shape, + ); + let prev = credit.output[0].clone(); + ScriptCheckJob { txid: spend.compute_txid().to_byte_array(), prevouts: crate::block::JobPrevouts::owned(vec![prev]), tx: JobTx::owned(spend), @@ -414,8 +341,7 @@ fn run_script_row( cleanstack: flags.cleanstack, }, pre: std::sync::OnceLock::new(), - }; - verify_job_all_inputs(&job).map_err(|e| format!("{e}")) + } } /// Core EvalScript(scriptSig)+EvalScript(scriptPubKey) with optional P2SH redeem. @@ -620,37 +546,28 @@ fn run_all_script_rows() -> RowStats { continue; } }; - // Core: `0x51 0x20 #TAPROOTOUTPUT#` → OP_1 + 32-byte tweaked output key. - let pk_bytes = if pk_s.trim() == "0x51 0x20 #TAPROOTOUTPUT#" { - let Some(out) = tap_out else { + let pk_bytes = match super::core_script::assemble_script_pubkey(pk_s, tap_out) { + Ok(b) => b, + Err(e) => { st.ran += 1; st.fail += 1; if st.failures.len() < 40 { st.failures - .push(format!("#{idx} #TAPROOTOUTPUT# without control block")); + .push(format!("#{idx} assemble scriptPubKey: {e} pk={pk_s:?}")); } continue; - }; - let mut b = vec![0x51, 0x20]; - b.extend_from_slice(&out); - b - } else { - match assemble(pk_s) { - Ok(b) => b, - Err(e) => { - st.ran += 1; - st.fail += 1; - if st.failures.len() < 40 { - st.failures - .push(format!("#{idx} assemble scriptPubKey: {e} pk={pk_s:?}")); - } - continue; - } } }; st.ran += 1; - let got = run_script_row(&sig_bytes, &pk_bytes, witness, amount, &flags); + let got = run_script_row( + &sig_bytes, + &pk_bytes, + witness, + amount, + &flags, + SpendShape::default(), + ); let ok = outcome_matches(expect_s, &got); if ok { @@ -698,3 +615,274 @@ fn core_script_tests_all_rows() { st.pass, st.ran ); } + +/// Our script corpus, in addition to Core's JSON. Each `row` is Core +/// `script_tests.json` form. The v31.1 oracle in `script-oracle/` runs the +/// same file. +#[test] +fn script_corpus_rows_match_our_interpreter() { + let path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/script_corpus/script_tests.json"); + let text = std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("read {path:?}: {e}")); + let rows: Vec = serde_json::from_str(&text).expect("script corpus json"); + assert!(!rows.is_empty(), "script corpus is empty"); + for row in &rows { + let id = row["id"].as_str().unwrap_or("?").to_string(); + let cells = row["row"] + .as_array() + .unwrap_or_else(|| panic!("{id}: missing row")); + let (witness, amount, sig_s, pk_s, flags_s, expect, tap_out) = if cells[0].is_array() { + assert!( + cells.len() >= 5, + "{id}: witness row needs witness, scriptSig, scriptPubKey, flags, result" + ); + let (witness, amount, tap_out) = + parse_witness_and_amount(&cells[0]).unwrap_or_else(|e| panic!("{id} witness: {e}")); + ( + witness, + amount, + cells[1].as_str().unwrap_or(""), + cells[2].as_str().unwrap_or(""), + cells[3].as_str().unwrap_or(""), + cells[4].as_str().unwrap_or(""), + tap_out, + ) + } else { + assert!( + cells.len() >= 4, + "{id}: row needs scriptSig, scriptPubKey, flags, result" + ); + ( + Witness::new(), + Amount::ZERO, + cells[0].as_str().unwrap_or(""), + cells[1].as_str().unwrap_or(""), + cells[2].as_str().unwrap_or(""), + cells[3].as_str().unwrap_or(""), + None, + ) + }; + let sig = assemble(sig_s).unwrap_or_else(|e| panic!("{id} scriptSig: {e}")); + let pk = super::core_script::assemble_script_pubkey(pk_s, tap_out) + .unwrap_or_else(|e| panic!("{id} scriptPubKey: {e}")); + let flags = parse_flags(flags_s); + let shape = super::core_script::spend_shape_from_json(row.get("spend")) + .unwrap_or_else(|e| panic!("{id} spend: {e}")); + let got = run_script_row(&sig, &pk, witness, amount, &flags, shape); + assert!( + outcome_matches(expect, &got), + "{id}: expect {expect} got {got:?}" + ); + } +} + +struct CorpusSpend { + sig: Vec, + pk: Vec, + witness: Witness, + amount: Amount, + flags: CoreFlags, +} + +fn corpus_spend(rows: &[Value], id: &str) -> CorpusSpend { + let row = rows + .iter() + .find(|row| row["id"].as_str() == Some(id)) + .unwrap_or_else(|| panic!("missing corpus id {id}")); + let cells = row["row"] + .as_array() + .unwrap_or_else(|| panic!("{id}: missing row")); + let (witness, amount, sig_s, pk_s, flags_s, tap_out) = if cells[0].is_array() { + let (witness, amount, tap_out) = + parse_witness_and_amount(&cells[0]).unwrap_or_else(|e| panic!("{id} witness: {e}")); + ( + witness, + amount, + cells[1].as_str().unwrap_or(""), + cells[2].as_str().unwrap_or(""), + cells[3].as_str().unwrap_or(""), + tap_out, + ) + } else { + ( + Witness::new(), + Amount::ZERO, + cells[0].as_str().unwrap_or(""), + cells[1].as_str().unwrap_or(""), + cells[2].as_str().unwrap_or(""), + None, + ) + }; + CorpusSpend { + sig: assemble(sig_s).unwrap_or_else(|e| panic!("{id} scriptSig: {e}")), + pk: super::core_script::assemble_script_pubkey(pk_s, tap_out) + .unwrap_or_else(|e| panic!("{id} scriptPubKey: {e}")), + witness, + amount, + flags: parse_flags(flags_s), + } +} + +fn load_corpus_rows() -> Vec { + let path = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests/fixtures/script_corpus/script_tests.json"); + let text = std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("read {path:?}: {e}")); + serde_json::from_str(&text).expect("script corpus json") +} + +/// Typed P2PKH, P2WPKH, and key-path P2TR accept the corpus spends. +/// +/// Accept or reject from `run_script_row` does not name the function that ran. +/// These calls use the credit/spend job that function builds, and the classify +/// / `needs_interpreted_ecdsa` checks are the arms `verify_input` matches on. +#[test] +fn corpus_fast_paths_call_typed_verifiers() { + use bitcoin::sighash::SighashCache; + + use super::classify::{classify, witness_program, ScriptKind}; + use super::crypto::TapSpentHashes; + use super::{needs_interpreted_ecdsa, p2pkh, p2tr, p2wpkh, verify_input}; + + let rows = load_corpus_rows(); + let tap = TapSpentHashes::default(); + + let spend = corpus_spend(&rows, "p2pkh-fast-ok"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let spk = Script::from_bytes(job.prevout_script(0).expect("prevout")); + assert_eq!(classify(spk), ScriptKind::P2pkh); + assert!(!needs_interpreted_ecdsa(&job)); + let owned = Transaction::clone(&job.tx); + let mut cache = SighashCache::new(&owned); + p2pkh::verify(&job, 0, &owned, &mut cache).expect("p2pkh typed accept"); + let tx: &Transaction = &job.tx; + let mut dispatch_cache = None; + verify_input(&job, 0, tx, &mut dispatch_cache, job.pre(), &tap).expect("p2pkh dispatch"); + let mut policy = script_row_job( + &spend.sig, + &spend.pk, + Witness::new(), + spend.amount, + &spend.flags, + SpendShape::default(), + ); + policy.low_s = true; + assert!(needs_interpreted_ecdsa(&policy)); + + let spend = corpus_spend(&rows, "p2pkh-fast-mutated"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let spk = Script::from_bytes(job.prevout_script(0).expect("prevout")); + assert_ne!(classify(spk), ScriptKind::P2pkh); + let tx: &Transaction = &job.tx; + let mut dispatch_cache = None; + assert!(verify_input(&job, 0, tx, &mut dispatch_cache, job.pre(), &tap).is_err()); + + let spend = corpus_spend(&rows, "p2pkh-fad-collision"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let spk = Script::from_bytes(job.prevout_script(0).expect("prevout")); + assert_eq!(classify(spk), ScriptKind::P2pkh); + let owned = Transaction::clone(&job.tx); + let mut cache = SighashCache::new(&owned); + let err = p2pkh::verify(&job, 0, &owned, &mut cache).expect_err("collision"); + assert!(!super::p2pkh_scriptsig_shape_error(&err), "{err}"); + let tx: &Transaction = &job.tx; + let mut dispatch_cache = None; + assert!(verify_input(&job, 0, tx, &mut dispatch_cache, job.pre(), &tap).is_err()); + + let spend = corpus_spend(&rows, "p2wpkh-fast-ok"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let spk = Script::from_bytes(job.prevout_script(0).expect("prevout")); + let (version, program) = witness_program(spk).expect("v0 program"); + assert_eq!((version, program.len()), (0, 20)); + assert!(!needs_interpreted_ecdsa(&job)); + let tx: &Transaction = &job.tx; + p2wpkh::verify(&job, 0, tx, job.pre()).expect("p2wpkh typed accept"); + let mut dispatch_cache = None; + verify_input(&job, 0, tx, &mut dispatch_cache, job.pre(), &tap).expect("p2wpkh dispatch"); + + let spend = corpus_spend(&rows, "p2wpkh-fast-mutated"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let spk = Script::from_bytes(job.prevout_script(0).expect("prevout")); + let (version, program) = witness_program(spk).expect("still a v0 program"); + assert_eq!((version, program.len()), (0, 20)); + let tx: &Transaction = &job.tx; + assert!(p2wpkh::verify(&job, 0, tx, job.pre()).is_err()); + + let spend = corpus_spend(&rows, "p2tr-keypath-ok"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let tx: &Transaction = &job.tx; + p2tr::verify(&job, 0, tx, &tap).expect("key path typed accept"); + let mut dispatch_cache = None; + verify_input(&job, 0, tx, &mut dispatch_cache, job.pre(), &tap).expect("p2tr dispatch"); + + let spend = corpus_spend(&rows, "p2tr-keypath-mutated"); + let job = script_row_job( + &spend.sig, + &spend.pk, + spend.witness, + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let tx: &Transaction = &job.tx; + assert!(p2tr::verify(&job, 0, tx, &tap).is_err()); + + let spend = corpus_spend(&rows, "p2pkh-fast-ok"); + let mut sig = spend.sig; + // Last byte of the 0x47-byte signature push is the hashtype. Flipping it + // keeps the DER encoding and fails the typed ECDSA check. + sig[0x47] = 0x03; + let job = script_row_job( + &sig, + &spend.pk, + Witness::new(), + spend.amount, + &spend.flags, + SpendShape::default(), + ); + let owned = Transaction::clone(&job.tx); + let mut cache = SighashCache::new(&owned); + let err = p2pkh::verify(&job, 0, &owned, &mut cache).expect_err("bad hashtype"); + assert!(format!("{err}").contains("ecdsa"), "{err}"); +} diff --git a/crates/rbitcoin-consensus/src/script/interpreter.rs b/crates/rbitcoin-consensus/src/script/interpreter.rs index b721698d1..08f366f52 100644 --- a/crates/rbitcoin-consensus/src/script/interpreter.rs +++ b/crates/rbitcoin-consensus/src/script/interpreter.rs @@ -588,6 +588,9 @@ pub(crate) fn eval_script( } let rm = ctx.minimal_data; + // `push` enforces the shared stack limit. A later check would + // not see a larger stack: every growth goes through `push`, + // and OP_TOALTSTACK only moves an element. match code { // OP_0 is PushBytes, not an opcode. OP_RESERVED, OP_VER, // OP_VERIF, and OP_RETURN fail from the unknown-opcode arm @@ -804,11 +807,10 @@ pub(crate) fn eval_script( 0xa6 => { let v = pop(stack)?; use bitcoin::hashes::ripemd160; - push( - stack, - altstack.len(), - ripemd160::Hash::hash(&v).to_byte_array().to_vec(), - )?; + let digest = ripemd160::Hash::hash(&v).to_byte_array(); + // Pop-then-one-push cannot exceed the limit `push` already + // enforced on the way to a full stack. The digest is 20 bytes. + push(stack, altstack.len(), digest.to_vec()).expect("ripemd160 fits"); } 0xa7 => { // OP_SHA1 is consensus-enabled (was stubbed → would fail post-milestone). @@ -826,17 +828,13 @@ pub(crate) fn eval_script( 0xaa => { let v = pop(stack)?; use bitcoin::hashes::sha256d; - push( - stack, - altstack.len(), - sha256d::Hash::hash(&v).to_byte_array().to_vec(), - )?; + let digest = sha256d::Hash::hash(&v).to_byte_array(); + // Same stack shape as RIPEMD160: one pop, one 32-byte push. + push(stack, altstack.len(), digest.to_vec()).expect("hash256 fits"); } 0xab => { // Tapscript: instruction index. Base/v0: scriptCode after this opcode. - if ctx.const_scriptcode && ctx.sig_version == SigVersion::Base { - return Err(ConsensusError::Script("OP_CODESEPARATOR".into())); - } + // CONST_SCRIPTCODE already returned above, including unexecuted. ctx.codeseparator_pos.set(this_pos); ctx.codeseparator_script_off .set(Some(byte_index.saturating_add(1))); @@ -916,19 +914,13 @@ pub(crate) fn eval_script( } 0xb0 | 0xb3 | 0xb4 | 0xb5 | 0xb6 | 0xb7 | 0xb8 | 0xb9 => {} _ => { - if ctx.sig_version == SigVersion::TapScript && is_op_success(code) { - return Ok(false); - } - // Non-tapscript disabled opcodes already returned above. + // OP_SUCCESS returned before this loop. Disabled opcodes + // already returned above. return Err(ConsensusError::Script(format!( "unknown opcode 0x{code:02x}" ))); } } - // Core: stack + altstack share MAX_STACK_SIZE (1000). - if stack.len() + altstack.len() > MAX_STACK_SIZE { - return Err(ConsensusError::Script("stack size".into())); - } } } } @@ -1114,9 +1106,9 @@ fn op_checkmultisig( sigs.push(pop(stack)?); } let dummy = pop(stack)?; - // BIP147: required for Witness v0; Base only when SCRIPT_VERIFY_NULLDUMMY. - // Independent of CSV (Core treats the flags separately). - if !dummy.is_empty() && (ver == PreTapscript::WitnessV0 || ctx.null_dummy) { + // BIP147 is SCRIPT_VERIFY_NULLDUMMY. Core does not add a witness-v0 + // special case. Confirm sets the flag for every segwit block. + if !dummy.is_empty() && ctx.null_dummy { return Err(ConsensusError::Script("NULLDUMMY".into())); } @@ -1408,10 +1400,10 @@ fn check_signature_encoding(sig: &[u8], ctx: &EvalContext<'_>) -> Result<(), Con return Err(ConsensusError::Script("SIG_DER".into())); } if ctx.low_s { - if let Ok((ecdsa, _)) = crypto::parse_der_sig(sig, false) { - if !crypto::is_low_der_s(&ecdsa) { - return Err(ConsensusError::Script("SIG_HIGH_S".into())); - } + // LOW_S already required BIP66 encoding above, so the lax parse hits. + let (ecdsa, _) = crypto::parse_der_sig(sig, false).expect("BIP66 signature parses"); + if !crypto::is_low_der_s(&ecdsa) { + return Err(ConsensusError::Script("SIG_HIGH_S".into())); } } if ctx.strictenc && !crypto::is_defined_hashtype(sig) { @@ -1442,10 +1434,9 @@ fn checksig_schnorr( }; let xonly = bitcoin::key::XOnlyPublicKey::from_slice(pubkey) .map_err(|_| ConsensusError::Script("tapscript xonly".into()))?; - let schnorr = match bitcoin::secp256k1::schnorr::Signature::from_slice(sig_bytes) { - Ok(s) => s, - Err(_) => return Ok(false), - }; + // `from_slice` rejects only a length other than 64. `sig_bytes` is that long. + let schnorr = bitcoin::secp256k1::schnorr::Signature::from_slice(sig_bytes) + .expect("64-byte schnorr slice"); let exec = ctx.tapscript.as_ref().ok_or_else(|| { ConsensusError::Script("invariant: tapscript spend without tapleaf hash".into()) })?; @@ -1584,6 +1575,14 @@ mod success_and_disabled_tests { use bitcoin::{Amount, OutPoint, Sequence, Transaction, TxIn, TxOut, Witness}; fn eval(script_bytes: &[u8], sig_version: SigVersion) -> Result { + eval_with_null_dummy(script_bytes, sig_version, false) + } + + fn eval_with_null_dummy( + script_bytes: &[u8], + sig_version: SigVersion, + null_dummy: bool, + ) -> Result { let tx = Transaction { version: bitcoin::transaction::Version::TWO, lock_time: LockTime::ZERO, @@ -1600,7 +1599,8 @@ mod success_and_disabled_tests { }; // script_code points into script_bytes via Script::from_bytes let script = Script::from_bytes(script_bytes); - let ctx = EvalContext::new(&tx, 0, Amount::from_sat(50_000), script, sig_version); + let mut ctx = EvalContext::new(&tx, 0, Amount::from_sat(50_000), script, sig_version); + ctx.null_dummy = null_dummy; let mut stack = Vec::new(); eval_script(script, &mut stack, &ctx) } @@ -1943,33 +1943,37 @@ mod success_and_disabled_tests { } } - /// BIP147: non-empty CHECKMULTISIG dummy fails when NULLDUMMY active. + /// BIP147: a non-empty CHECKMULTISIG dummy fails only when the flag is on. #[test] fn nulldummy_rejects_nonempty_dummy() { - // 0-of-0 multisig: n=0, m=0, dummy non-empty → should fail NULLDUMMY. - // Stack build (pushed first → deep): dummy=0x01, m=0, n=0 then OP_CHECKMULTISIG - // After pops: n, keys, m, sigs, dummy — for 0/0: push dummy, 0, 0, CHECKMULTISIG - let script = vec![0x01, 0xff, 0x00, 0x00, 0xae, 0x51]; // dummy, 0, 0, CMS, TRUE won't run - let err = eval(&script, SigVersion::WitnessV0).unwrap_err(); + // 0-of-0 multisig: n=0, m=0, dummy non-empty → NULLDUMMY when the flag is set. + let script = vec![0x01, 0xff, 0x00, 0x00, 0xae, 0x51]; + let err = eval_with_null_dummy(&script, SigVersion::WitnessV0, true).unwrap_err(); assert!( format!("{err}").contains("NULLDUMMY"), "expected NULLDUMMY, got {err}" ); - // Empty dummy 0-of-0 succeeds (CMS pushes true), then need true top — CMS pushes 1. - let script_ok = vec![0x00, 0x00, 0x00, 0xae]; // empty dummy, m=0, n=0, CMS - eval(&script_ok, SigVersion::WitnessV0).expect("0-of-0 empty dummy"); + let err = eval_with_null_dummy(&script, SigVersion::Base, true).unwrap_err(); + assert!( + format!("{err}").contains("NULLDUMMY"), + "base flag on, got {err}" + ); + // Empty dummy 0-of-0 succeeds (CMS pushes true). + let script_ok = vec![0x00, 0x00, 0x00, 0xae]; + eval_with_null_dummy(&script_ok, SigVersion::WitnessV0, true).expect("0-of-0 empty dummy"); } - /// Witness v0 rejects a non-empty dummy even though `EvalContext::new` - /// leaves NULLDUMMY off. Core would accept that. Base with the flag off - /// accepts it, which is the version confirm actually runs before segwit. + /// Witness v0 follows SCRIPT_VERIFY_NULLDUMMY. Flag off accepts, matching + /// Core VerifyScript. Base with the flag off accepts the same dummy. #[test] - fn witness_v0_nulldummy_rejects_when_flag_is_off() { + fn witness_v0_nulldummy_follows_the_flag() { let script = vec![0x01, 0xff, 0x00, 0x00, 0xae]; - let err = eval(&script, SigVersion::WitnessV0).unwrap_err(); + eval_with_null_dummy(&script, SigVersion::WitnessV0, false) + .expect("witness v0 flag off accepts"); + let err = eval_with_null_dummy(&script, SigVersion::WitnessV0, true).unwrap_err(); assert!( format!("{err}").contains("NULLDUMMY"), - "witness v0 is stricter than the flag, got {err}" + "witness v0 flag on, got {err}" ); eval(&script, SigVersion::Base).expect("base with NULLDUMMY off allows the dummy"); } @@ -2810,3 +2814,156 @@ mod p2sh_redeem_parse_tests { assert!(r.is_ok(), "{r:?}"); } } + +#[cfg(test)] +mod untaken_consensus_arms { + use std::borrow::Cow; + + use super::*; + use bitcoin::absolute::LockTime; + use bitcoin::script::ScriptBuf; + use bitcoin::secp256k1::{Message, Secp256k1, SecretKey}; + use bitcoin::{Amount, OutPoint, PublicKey, Sequence, Transaction, TxIn, TxOut, Witness}; + + fn tx_with_inputs(n: usize) -> Transaction { + Transaction { + version: bitcoin::transaction::Version::ONE, + lock_time: LockTime::ZERO, + input: (0..n) + .map(|_| TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::new(), + sequence: Sequence::MAX, + witness: Witness::new(), + }) + .collect(), + output: vec![TxOut { + value: Amount::ZERO, + script_pubkey: ScriptBuf::from_bytes(vec![0x51]), + }], + } + } + + #[test] + fn find_and_delete_encodes_pushdata4_and_stops_on_a_truncated_push() { + let encoded = find_and_delete(&[], &vec![0u8; 70_000]); + assert!(encoded.is_empty()); + assert_eq!(find_and_delete(&[0x4c], &[0x11]), vec![0x4c]); + } + + #[test] + fn minimal_push_treats_data_over_64k_as_pushdata4() { + assert!(check_minimal_push(&vec![0u8; 65_536], 0x4e)); + } + + #[test] + fn from_job_past_the_prevouts_uses_a_zero_amount() { + let tx = tx_with_inputs(1); + let job = crate::block::ScriptCheckJob::new( + vec![TxOut { + value: Amount::from_sat(1), + script_pubkey: ScriptBuf::from_bytes(vec![0x51]), + }], + tx, + crate::block::ScriptVerifyFlags::buried(false, false, false, false, false), + ); + let sc = Script::from_bytes(&[0x51]); + let ctx = EvalContext::from_job(&job, &job.tx, 3, sc, SigVersion::Base).unwrap(); + assert_eq!(ctx.amount, Amount::ZERO); + } + + #[test] + fn checksig_sighash_failure_is_a_soft_false() { + let secp = Secp256k1::new(); + let sk = SecretKey::from_slice(&[0x11; 32]).unwrap(); + let pk = PublicKey::new(sk.public_key(&secp)); + let mut sig = secp + .sign_ecdsa(&Message::from_digest([9; 32]), &sk) + .serialize_der() + .to_vec(); + sig.push(0x01); + let tx = tx_with_inputs(1); + let sc = Script::from_bytes(&[0x51]); + let ctx = EvalContext::from_eval_parts( + &tx, + 5, + Amount::ZERO, + sc, + SigVersion::Base, + false, + false, + false, + Cow::Owned(crate::TxPrecompute::from_tx(&tx)), + ); + let matched = ecdsa_sig_matches(&sig, &pk.to_bytes(), &ctx, &[0x51], PreTapscript::Base); + assert!(!matched.unwrap()); + } + + #[test] + fn tapscript_checksig_without_leaf_facts_fails() { + let tx = tx_with_inputs(1); + let mut script = vec![0x40]; + script.extend_from_slice(&[0x11; 64]); + script.push(0x20); + script.extend_from_slice(&[0x02; 32]); + script.push(0xac); + let sc = Script::from_bytes(&script); + let ctx = EvalContext::from_eval_parts( + &tx, + 0, + Amount::ZERO, + sc, + SigVersion::TapScript, + false, + false, + false, + Cow::Owned(crate::TxPrecompute::from_tx(&tx)), + ); + let err = eval_script(sc, &mut Vec::new(), &ctx).unwrap_err(); + assert!(format!("{err}").contains("tapleaf"), "{err}"); + } + + #[test] + fn tapscript_checksig_rejects_a_signature_that_is_not_64_or_65_bytes() { + let tx = tx_with_inputs(1); + let mut script = vec![0x01, 0x11, 0x20]; + script.extend_from_slice(&[0x02; 32]); + script.push(0xac); + let sc = Script::from_bytes(&script); + let ctx = EvalContext::from_eval_parts( + &tx, + 0, + Amount::ZERO, + sc, + SigVersion::TapScript, + false, + false, + false, + Cow::Owned(crate::TxPrecompute::from_tx(&tx)), + ); + let err = eval_script(sc, &mut Vec::new(), &ctx).unwrap_err(); + assert!(format!("{err}").contains("CHECKSIG"), "{err}"); + } + + #[test] + fn tapscript_checksigverify_rejects_an_empty_signature_on_a_32_byte_key() { + let tx = tx_with_inputs(1); + let mut script = vec![0x00, 0x20]; + script.extend_from_slice(&[0x02; 32]); + script.push(0xad); + let sc = Script::from_bytes(&script); + let ctx = EvalContext::from_eval_parts( + &tx, + 0, + Amount::ZERO, + sc, + SigVersion::TapScript, + false, + false, + false, + Cow::Owned(crate::TxPrecompute::from_tx(&tx)), + ); + let err = eval_script(sc, &mut Vec::new(), &ctx).unwrap_err(); + assert!(format!("{err}").contains("CHECKSIGVERIFY"), "{err}"); + } +} diff --git a/crates/rbitcoin-consensus/src/script/mod.rs b/crates/rbitcoin-consensus/src/script/mod.rs index 33fc1e664..b62b0d7b8 100644 --- a/crates/rbitcoin-consensus/src/script/mod.rs +++ b/crates/rbitcoin-consensus/src/script/mod.rs @@ -16,8 +16,8 @@ mod p2wsh; mod core_bip341; #[cfg(test)] mod core_fixture; -#[cfg(test)] -pub(crate) mod core_script; +#[cfg(any(test, feature = "corpus"))] +pub mod core_script; #[cfg(test)] mod core_sighash; #[cfg(test)] @@ -275,12 +275,13 @@ fn verify_bare( spk, interpreter::SigVersion::Base, )?; - if interpreter::eval_script(spk, &mut stack, &ctx)? { - if job.cleanstack { - interpreter::require_clean_true(&stack)?; - } else { - interpreter::require_true_top(&stack)?; - } + // Base `eval_script` returns `Ok(true)` or `Err`. `Ok(false)` is tapscript + // OP_SUCCESS, which this sigversion does not produce, so the top check always runs. + interpreter::eval_script(spk, &mut stack, &ctx)?; + if job.cleanstack { + interpreter::require_clean_true(&stack)?; + } else { + interpreter::require_true_top(&stack)?; } Ok(()) } @@ -580,11 +581,11 @@ pub(crate) mod crypto { None } }); - if let Some(e) = failed { - return Err(e); - } if !ok { - return Err(ConsensusError::Script("tapscript sighash prevouts".into())); + // `failed` is set whenever the callback returns `None`. + return Err( + failed.unwrap_or(ConsensusError::Script("tapscript sighash prevouts".into())) + ); } let hashes = [ sighash_midstate(spent.sha_amounts)?, @@ -895,6 +896,42 @@ pub(crate) mod crypto { let bad = vec![0x30, 0x01, 0x00]; assert!(parse_der_sig(&bad, true).is_err()); } + + #[test] + fn spent_hashes_report_a_missing_wire_prevout() { + use bitcoin::absolute::LockTime; + use bitcoin::script::ScriptBuf; + use bitcoin::{Amount, OutPoint, Sequence, Transaction, TxIn, TxOut, Witness}; + + let tx = Transaction { + version: bitcoin::transaction::Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::new(), + sequence: Sequence::MAX, + witness: Witness::new(), + }], + output: vec![TxOut { + value: Amount::ZERO, + script_pubkey: ScriptBuf::new(), + }], + }; + let job = crate::block::ScriptCheckJob::from_parts( + [0u8; 32], + crate::block::JobPrevouts::Shared(vec![crate::block::SharedPrevout::Wire { + tx_index: 0, + vout: 0, + }]), + crate::block::JobTx::owned(tx), + crate::block::ScriptVerifyFlags::buried(false, false, false, true, true), + ); + let err = TapSpentHashes::default().get(&job).unwrap_err(); + assert!( + format!("{err}").contains("invariant") || format!("{err}").contains("Corrupt"), + "{err}" + ); + } } } @@ -1576,4 +1613,54 @@ mod verify_routing_tests { assert!(verify_job_all_inputs(&job).is_err()); assert!(verify_bare(&job, 0, &job.tx).is_err()); } + + #[test] + fn tap_sighash_rejects_a_bad_index_and_a_prevout_count_mismatch() { + let tx = Transaction { + version: bitcoin::transaction::Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::new(), + sequence: Sequence::MAX, + witness: Witness::new(), + }], + output: vec![TxOut { + value: Amount::ZERO, + script_pubkey: ScriptBuf::new(), + }], + }; + let prevout = TxOut { + value: Amount::ZERO, + script_pubkey: ScriptBuf::from_bytes(vec![0x51]), + }; + let flags = crate::block::ScriptVerifyFlags::buried(false, false, false, true, true); + let job = ScriptCheckJob::new(vec![prevout.clone()], tx.clone(), flags); + let spent = crypto::TapSpentHashes::default(); + let single = std::cell::OnceCell::new(); + let err = crypto::tap_signature_hash( + &job, + 3, + bitcoin::sighash::TapSighashType::Default, + &spent, + None, + None, + &single, + ) + .unwrap_err(); + assert!(format!("{err}").contains("sighash input"), "{err}"); + + let mismatch = ScriptCheckJob::new(vec![prevout.clone(), prevout], tx, flags); + let err = crypto::tap_signature_hash( + &mismatch, + 0, + bitcoin::sighash::TapSighashType::Default, + &spent, + None, + None, + &single, + ) + .unwrap_err(); + assert!(format!("{err}").contains("sighash prevouts"), "{err}"); + } } diff --git a/crates/rbitcoin-consensus/src/script/nested.rs b/crates/rbitcoin-consensus/src/script/nested.rs index 852df81f0..deaadd30b 100644 --- a/crates/rbitcoin-consensus/src/script/nested.rs +++ b/crates/rbitcoin-consensus/src/script/nested.rs @@ -104,13 +104,13 @@ pub(crate) fn verify_p2sh_legacy( let redeem_script = Script::from_bytes(&redeem); let ctx = EvalContext::from_job(job, tx, input_index, redeem_script, SigVersion::Base)?; - if interpreter::eval_script(redeem_script, &mut stack, &ctx)? { - // BIP16: true top unless CLEANSTACK. Witness nested paths clean separately. - if job.cleanstack { - interpreter::require_clean_true(&stack)?; - } else { - interpreter::require_true_top(&stack)?; - } + // Base eval returns `Ok(true)` or `Err`. `Ok(false)` is tapscript OP_SUCCESS. + // BIP16: true top unless CLEANSTACK. Witness nested paths clean separately. + interpreter::eval_script(redeem_script, &mut stack, &ctx)?; + if job.cleanstack { + interpreter::require_clean_true(&stack)?; + } else { + interpreter::require_true_top(&stack)?; } Ok(()) } @@ -893,4 +893,49 @@ mod tests { assert_eq!(items, vec![vec![], vec![0x10]]); assert_eq!(redeem, vec![0x51]); } + + #[test] + fn push_only_scan_rejects_a_truncated_script() { + assert!(!script_is_push_only(Script::from_bytes(&[0x4e, 0x01]))); + } + + #[test] + fn nested_segwit_reports_a_missing_prevout() { + let program = { + let mut v = vec![0x00, 0x14]; + v.extend_from_slice(&[0x02; 20]); + v + }; + let mut script_sig = vec![program.len() as u8]; + script_sig.extend_from_slice(&program); + let tx = Transaction { + version: bitcoin::transaction::Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::from_bytes(script_sig), + sequence: Sequence::MAX, + witness: Witness::from_slice(&[program.as_slice()]), + }], + output: vec![], + }; + let job = ScriptCheckJob::from_parts( + [0u8; 32], + crate::block::JobPrevouts::Shared(vec![crate::block::SharedPrevout::Wire { + tx_index: 0, + vout: 0, + }]), + crate::block::JobTx::owned(tx), + crate::block::ScriptVerifyFlags::buried(false, false, false, true, false), + ); + let got = try_p2sh_nested_segwit( + &job, + 0, + &job.tx, + &mut bitcoin::sighash::SighashCache::new(&job.tx), + job.pre(), + &[program], + ); + assert!(got.unwrap().is_err()); + } } diff --git a/crates/rbitcoin-consensus/src/script/p2tr.rs b/crates/rbitcoin-consensus/src/script/p2tr.rs index 25e794a57..3debaf1bf 100644 --- a/crates/rbitcoin-consensus/src/script/p2tr.rs +++ b/crates/rbitcoin-consensus/src/script/p2tr.rs @@ -192,12 +192,9 @@ fn verify_script_path( // rejects 0x50, which Core accepts as a future leaf. let (leaf, tapleaf_hash) = verify_control_commitment(&control_bytes, output_key_bytes, script)?; + // Unknown leaf versions are valid consensus spends. The script is not run. + // DISCOURAGE_UPGRADABLE_TAPROOT_VERSION is standardness. Confirm never sets it. if leaf != TAPSCRIPT_LEAF { - if job.flags.discourage_upgradable_witness { - return Err(ConsensusError::Script( - "DISCOURAGE_UPGRADABLE_TAPROOT_VERSION".into(), - )); - } return Ok(()); } @@ -1655,4 +1652,82 @@ mod bip341_tests { }; assert!(script::verify_job_all_inputs(&job).is_err()); } + + #[test] + fn script_path_rejects_a_witness_shorter_than_script_and_control() { + let job = ScriptCheckJob::new( + vec![TxOut { + value: Amount::from_sat(1), + script_pubkey: ScriptBuf::from_bytes({ + let mut spk = vec![0x51, 0x20]; + spk.extend([2u8; 32]); + spk + }), + }], + Transaction { + version: bitcoin::transaction::Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::new(), + sequence: Sequence::MAX, + witness: Witness::new(), + }], + output: vec![], + }, + crate::block::ScriptVerifyFlags::buried(false, false, false, true, true), + ); + let err = verify_script_path( + &job, + 0, + &job.tx, + &[2u8; 32], + &crypto::TapSpentHashes::default(), + ) + .unwrap_err(); + assert!(format!("{err}").contains("script path short"), "{err}"); + } + + #[test] + fn key_path_sighash_reports_a_missing_prevout() { + // Output key from the corpus key-path row. It is a real x-only point. + let output_key = [ + 0x2a, 0x64, 0xb1, 0xee, 0x33, 0x75, 0xf3, 0xbb, 0x4b, 0x36, 0x7b, 0x8c, 0xb8, 0x38, + 0x4a, 0x47, 0xf7, 0x3c, 0xf2, 0x31, 0x71, 0x7f, 0x82, 0x7c, 0x6c, 0x6f, 0xbb, 0xf5, + 0xae, 0xcf, 0x0c, 0x36, + ]; + let mut spk = vec![0x51, 0x20]; + spk.extend(output_key); + let job = ScriptCheckJob::from_parts( + [0u8; 32], + crate::block::JobPrevouts::Shared(vec![crate::block::SharedPrevout::Wire { + tx_index: 0, + vout: 0, + }]), + crate::block::JobTx::owned(Transaction { + version: bitcoin::transaction::Version::TWO, + lock_time: LockTime::ZERO, + input: vec![TxIn { + previous_output: OutPoint::null(), + script_sig: ScriptBuf::new(), + sequence: Sequence::MAX, + witness: Witness::from_slice(&[[0u8; 64].as_slice()]), + }], + output: vec![], + }), + crate::block::ScriptVerifyFlags::buried(false, false, false, true, true), + ); + let err = verify_key_path( + &job, + 0, + &job.tx, + &output_key, + &crypto::TapSpentHashes::default(), + ) + .unwrap_err(); + assert!( + format!("{err}").contains("invariant") || format!("{err}").contains("Corrupt"), + "{err}" + ); + } } diff --git a/crates/rbitcoin-consensus/src/script/p2wsh.rs b/crates/rbitcoin-consensus/src/script/p2wsh.rs index 37eef6f7c..d99488054 100644 --- a/crates/rbitcoin-consensus/src/script/p2wsh.rs +++ b/crates/rbitcoin-consensus/src/script/p2wsh.rs @@ -70,9 +70,9 @@ pub(crate) fn execute_witness_v0<'w>( stack.push(item.to_vec()); } let ctx = EvalContext::from_job(job, tx, input_index, script, SigVersion::WitnessV0)?; - if interpreter::eval_script(script, &mut stack, &ctx)? { - interpreter::require_clean_true(&stack)?; - } + // Witness v0 eval returns `Ok(true)` or `Err`. `Ok(false)` is tapscript OP_SUCCESS. + interpreter::eval_script(script, &mut stack, &ctx)?; + interpreter::require_clean_true(&stack)?; Ok(()) } diff --git a/crates/rbitcoin-consensus/tests/fixtures/script_corpus/INDEX.md b/crates/rbitcoin-consensus/tests/fixtures/script_corpus/INDEX.md new file mode 100644 index 000000000..afad2d562 --- /dev/null +++ b/crates/rbitcoin-consensus/tests/fixtures/script_corpus/INDEX.md @@ -0,0 +1,477 @@ +# Script corpus + +Run beside Bitcoin Core's JSON suites. Every row is executed by our +interpreter and by Bitcoin Core v31.1 `VerifyScript` (the submodule, not +the crates.io `bitcoinconsensus` crate, which is Core 26). Both must +agree with the row's expected accept or reject. Error strings are not +compared. + +This is not a proof over every byte string. secp256k1 is a shared +library. Block sigop cost, the milestone script skip, and transaction +structure are outside this corpus. Policy flags that confirm never sets +appear only as rows that leave them off. + +The `row` array is Core `script_tests.json` form +`[scriptSig, scriptPubKey, flags, result]`, or the witness form +`[witness, scriptSig, scriptPubKey, flags, result]`. Either can be +appended upstream without a runner change. + +Witness v0 and tapscript rows are spends, so both engines see them +through `VerifyScript`. Legacy rows are bare scripts with no flags. + +## Vectors + +| Id | Predicate | +|----|-----------| +| `smoke-op-1` | Harness: empty scriptSig, `OP_1` scriptPubKey, no flags, accepts on both engines. | +| `script-len-10000-legacy` | Legacy and witness v0 accept a 10,000-byte script. Tapscript has no script-size cap. | +| `script-len-10000-v0` | Legacy and witness v0 accept a 10,000-byte script. Tapscript has no script-size cap. | +| `script-len-10000-tapscript` | Legacy and witness v0 accept a 10,000-byte script. Tapscript has no script-size cap. | +| `script-len-10001-legacy` | Legacy and witness v0 reject a 10,001-byte script. Tapscript accepts it. | +| `script-len-10001-v0` | Legacy and witness v0 reject a 10,001-byte script. Tapscript accepts it. | +| `script-len-10001-tapscript` | Legacy and witness v0 reject a 10,001-byte script. Tapscript accepts it. | +| `push-520-legacy` | A 520-byte push is the element maximum and accepts. | +| `push-520-v0` | A 520-byte push is the element maximum and accepts. | +| `push-520-tapscript` | A 520-byte push is the element maximum and accepts. | +| `push-521-legacy` | A 521-byte push rejects. | +| `push-521-v0` | A 521-byte push rejects. | +| `push-521-tapscript` | A 521-byte push rejects. | +| `push-520-unexec-legacy` | A 520-byte push inside an unexecuted IF accepts. The element cap still applies there. | +| `push-520-unexec-v0` | A 520-byte push inside an unexecuted IF accepts. The element cap still applies there. | +| `push-520-unexec-tapscript` | A 520-byte push inside an unexecuted IF accepts. The element cap still applies there. | +| `push-521-unexec-legacy` | A 521-byte push inside an unexecuted IF rejects. | +| `push-521-unexec-v0` | A 521-byte push inside an unexecuted IF rejects. | +| `push-521-unexec-tapscript` | A 521-byte push inside an unexecuted IF rejects. | +| `ops-201-legacy` | 201 non-push opcodes accept on legacy and witness v0. Tapscript has no opcode cap. | +| `ops-201-v0` | 201 non-push opcodes accept on legacy and witness v0. Tapscript has no opcode cap. | +| `ops-201-tapscript` | 201 non-push opcodes accept on legacy and witness v0. Tapscript has no opcode cap. | +| `ops-202-legacy` | 202 non-push opcodes reject on legacy and witness v0. Tapscript accepts them. | +| `ops-202-v0` | 202 non-push opcodes reject on legacy and witness v0. Tapscript accepts them. | +| `ops-202-tapscript` | 202 non-push opcodes reject on legacy and witness v0. Tapscript accepts them. | +| `ops-unexec-201-legacy` | Opcodes inside an unexecuted IF count. IF plus 199 NOP plus ENDIF is 201 and accepts. | +| `ops-unexec-201-v0` | Opcodes inside an unexecuted IF count. IF plus 199 NOP plus ENDIF is 201 and accepts. | +| `ops-unexec-201-tapscript` | Opcodes inside an unexecuted IF count. IF plus 199 NOP plus ENDIF is 201 and accepts. | +| `ops-unexec-202-legacy` | IF plus 200 NOP plus ENDIF is 202. Legacy and witness v0 reject. Tapscript accepts. | +| `ops-unexec-202-v0` | IF plus 200 NOP plus ENDIF is 202. Legacy and witness v0 reject. Tapscript accepts. | +| `ops-unexec-202-tapscript` | IF plus 200 NOP plus ENDIF is 202. Legacy and witness v0 reject. Tapscript accepts. | +| `op16-excluded-legacy` | OP_0 through OP_16 do not count toward the 201 opcode cap. 202 OP_16 plus 201 DROP accepts. | +| `op16-excluded-v0` | OP_0 through OP_16 do not count toward the 201 opcode cap. 202 OP_16 plus 201 DROP accepts. | +| `op16-excluded-tapscript` | OP_0 through OP_16 do not count toward the 201 opcode cap. 202 OP_16 plus 201 DROP accepts. | +| `trunc-pushdata1-legacy` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata1-v0` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata1-tapscript` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata2-legacy` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata2-v0` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata2-tapscript` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata4-legacy` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata4-v0` | A truncated PUSHDATA rejects in every signature version. | +| `trunc-pushdata4-tapscript` | A truncated PUSHDATA rejects in every signature version. | +| `else-empty-legacy` | ELSE with an empty condition stack rejects. | +| `else-empty-v0` | ELSE with an empty condition stack rejects. | +| `else-empty-tapscript` | ELSE with an empty condition stack rejects. | +| `endif-empty-legacy` | ENDIF with an empty condition stack rejects. | +| `endif-empty-v0` | ENDIF with an empty condition stack rejects. | +| `endif-empty-tapscript` | ENDIF with an empty condition stack rejects. | +| `if-unclosed-legacy` | An unclosed IF rejects. | +| `if-unclosed-v0` | An unclosed IF rejects. | +| `if-unclosed-tapscript` | An unclosed IF rejects. | +| `verif-unexec-legacy` | OP_VERIF rejects even inside an unexecuted IF, in every signature version. | +| `verif-unexec-v0` | OP_VERIF rejects even inside an unexecuted IF, in every signature version. | +| `verif-unexec-tapscript` | OP_VERIF rejects even inside an unexecuted IF, in every signature version. | +| `vernotif-unexec-legacy` | OP_VERNOTIF rejects even inside an unexecuted IF, in every signature version. | +| `vernotif-unexec-v0` | OP_VERNOTIF rejects even inside an unexecuted IF, in every signature version. | +| `vernotif-unexec-tapscript` | OP_VERNOTIF rejects even inside an unexecuted IF, in every signature version. | +| `stack-1000-legacy` | Legacy main stack of 1,000 accepts. Cleanstack is off. | +| `stack-1001-legacy` | Legacy main stack of 1,001 rejects. | +| `stack-alt-1000-legacy` | Legacy main stack plus altstack of 1,000 accepts: 201 items moved aside, then 799 more. | +| `stack-alt-1001-legacy` | One more push after that shared 1,000 rejects. The opcode budget is already exactly 201. | +| `stack-1001-v0` | Witness v0 rejects a 1,001st stack push. A successful 1,000-deep witness script cannot also return to one element within the 201 opcode budget, so the accept side is the legacy and tapscript rows. | +| `stack-exec-1000-tapscript` | Tapscript enforces the shared 1,000 cap after each opcode. 1,000 pushes and 999 drops leave one true item. | +| `stack-exec-1001-tapscript` | Tapscript rejects the 1,001st push during execution. | +| `disabled-cat-unexec-legacy` | OP_CAT (0x7e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-cat-unexec-v0` | OP_CAT (0x7e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-cat-unexec-tapscript` | OP_CAT (0x7e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-substr-unexec-legacy` | OP_SUBSTR (0x7f) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-substr-unexec-v0` | OP_SUBSTR (0x7f) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-substr-unexec-tapscript` | OP_SUBSTR (0x7f) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-left-unexec-legacy` | OP_LEFT (0x80) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-left-unexec-v0` | OP_LEFT (0x80) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-left-unexec-tapscript` | OP_LEFT (0x80) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-right-unexec-legacy` | OP_RIGHT (0x81) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-right-unexec-v0` | OP_RIGHT (0x81) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-right-unexec-tapscript` | OP_RIGHT (0x81) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-invert-unexec-legacy` | OP_INVERT (0x83) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-invert-unexec-v0` | OP_INVERT (0x83) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-invert-unexec-tapscript` | OP_INVERT (0x83) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-and-unexec-legacy` | OP_AND (0x84) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-and-unexec-v0` | OP_AND (0x84) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-and-unexec-tapscript` | OP_AND (0x84) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-or-unexec-legacy` | OP_OR (0x85) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-or-unexec-v0` | OP_OR (0x85) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-or-unexec-tapscript` | OP_OR (0x85) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-xor-unexec-legacy` | OP_XOR (0x86) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-xor-unexec-v0` | OP_XOR (0x86) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-xor-unexec-tapscript` | OP_XOR (0x86) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2mul-unexec-legacy` | OP_2MUL (0x8d) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2mul-unexec-v0` | OP_2MUL (0x8d) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2mul-unexec-tapscript` | OP_2MUL (0x8d) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2div-unexec-legacy` | OP_2DIV (0x8e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2div-unexec-v0` | OP_2DIV (0x8e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-2div-unexec-tapscript` | OP_2DIV (0x8e) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mul-unexec-legacy` | OP_MUL (0x95) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mul-unexec-v0` | OP_MUL (0x95) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mul-unexec-tapscript` | OP_MUL (0x95) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-div-unexec-legacy` | OP_DIV (0x96) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-div-unexec-v0` | OP_DIV (0x96) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-div-unexec-tapscript` | OP_DIV (0x96) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mod-unexec-legacy` | OP_MOD (0x97) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mod-unexec-v0` | OP_MOD (0x97) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-mod-unexec-tapscript` | OP_MOD (0x97) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-lshift-unexec-legacy` | OP_LSHIFT (0x98) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-lshift-unexec-v0` | OP_LSHIFT (0x98) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-lshift-unexec-tapscript` | OP_LSHIFT (0x98) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-rshift-unexec-legacy` | OP_RSHIFT (0x99) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-rshift-unexec-v0` | OP_RSHIFT (0x99) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `disabled-rshift-unexec-tapscript` | OP_RSHIFT (0x99) rejects in legacy and witness v0 even inside an unexecuted IF. In tapscript that byte is OP_SUCCESS and accepts. | +| `exec-reserved-legacy` | 0x50 (RESERVED) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved-v0` | 0x50 (RESERVED) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved-tapscript` | 0x50 (RESERVED) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-reserved-legacy` | 0x50 (RESERVED) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved-v0` | 0x50 (RESERVED) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved-tapscript` | 0x50 (RESERVED) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-ver-legacy` | 0x62 (VER) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-ver-v0` | 0x62 (VER) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-ver-tapscript` | 0x62 (VER) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-ver-legacy` | 0x62 (VER) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-ver-v0` | 0x62 (VER) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-ver-tapscript` | 0x62 (VER) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-reserved1-legacy` | 0x89 (RESERVED1) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved1-v0` | 0x89 (RESERVED1) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved1-tapscript` | 0x89 (RESERVED1) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-reserved1-legacy` | 0x89 (RESERVED1) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved1-v0` | 0x89 (RESERVED1) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved1-tapscript` | 0x89 (RESERVED1) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-reserved2-legacy` | 0x8a (RESERVED2) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved2-v0` | 0x8a (RESERVED2) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-reserved2-tapscript` | 0x8a (RESERVED2) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-reserved2-legacy` | 0x8a (RESERVED2) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved2-v0` | 0x8a (RESERVED2) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-reserved2-tapscript` | 0x8a (RESERVED2) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-success187-legacy` | 0xbb (SUCCESS187) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-success187-v0` | 0xbb (SUCCESS187) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-success187-tapscript` | 0xbb (SUCCESS187) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-success187-legacy` | 0xbb (SUCCESS187) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-success187-v0` | 0xbb (SUCCESS187) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-success187-tapscript` | 0xbb (SUCCESS187) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-success254-legacy` | 0xfe (SUCCESS254) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-success254-v0` | 0xfe (SUCCESS254) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `exec-success254-tapscript` | 0xfe (SUCCESS254) rejects when executed on legacy and witness v0. Tapscript accepts it as OP_SUCCESS. | +| `unexec-success254-legacy` | 0xfe (SUCCESS254) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-success254-v0` | 0xfe (SUCCESS254) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `unexec-success254-tapscript` | 0xfe (SUCCESS254) is not a legacy disabled opcode, so an unexecuted one is skipped. Tapscript still accepts it as OP_SUCCESS. | +| `exec-return-legacy` | OP_RETURN rejects when executed in every signature version. | +| `exec-return-v0` | OP_RETURN rejects when executed in every signature version. | +| `exec-return-tapscript` | OP_RETURN rejects when executed in every signature version. | +| `unexec-return-legacy` | OP_RETURN inside an unexecuted IF is skipped in every signature version. | +| `unexec-return-v0` | OP_RETURN inside an unexecuted IF is skipped in every signature version. | +| `unexec-return-tapscript` | OP_RETURN inside an unexecuted IF is skipped in every signature version. | +| `exec-unknown-ff-legacy` | Opcode 0xff is not disabled and not OP_SUCCESS. Executing it rejects in every signature version. | +| `exec-unknown-ff-v0` | Opcode 0xff is not disabled and not OP_SUCCESS. Executing it rejects in every signature version. | +| `exec-unknown-ff-tapscript` | Opcode 0xff is not disabled and not OP_SUCCESS. Executing it rejects in every signature version. | +| `unexec-unknown-ff-legacy` | Opcode 0xff inside an unexecuted IF is skipped in every signature version. | +| `unexec-unknown-ff-v0` | Opcode 0xff inside an unexecuted IF is skipped in every signature version. | +| `unexec-unknown-ff-tapscript` | Opcode 0xff inside an unexecuted IF is skipped in every signature version. | +| `success-inside-push-tapscript` | An OP_SUCCESS byte inside a push is data. The following OP_RETURN still rejects. | +| `initial-1000-tapscript` | Tapscript accepts an initial stack of 1,000, then 999 DROP leaves one true item. | +| `initial-1001-tapscript` | Tapscript rejects an initial stack of 1,001 before the script runs. | +| `initial-520-tapscript` | Tapscript accepts a 520-byte initial element. | +| `initial-521-tapscript` | Tapscript rejects a 521-byte initial element. | +| `initial-520-v0` | Witness v0 accepts a 520-byte initial element. | +| `initial-521-v0` | Witness v0 rejects a 521-byte initial element. | +| `success-skip-1001` | One OP_SUCCESS accepts before the initial-stack check, including 1,001 items. | +| `success-unexec-1001` | OP_SUCCESS inside an unexecuted IF still accepts before the initial-stack check. | +| `success-unparseable-tail` | OP_SUCCESS followed by a truncated PUSHDATA accepts before the stack check. The unparseable tail is not executed. | +| `success187-skip-1001` | OP_SUCCESS187 accepts before the 1,001 initial-stack check. | +| `success-skip-521` | OP_SUCCESS accepts before the 521-byte initial-element check. | +| `num-max-roundtrip-legacy` | The 4-byte maximum positive script number decodes, survives ADD 0, and compares equal. Minimal-encoding checks stay off. | +| `num-max-roundtrip-v0` | The 4-byte maximum positive script number decodes, survives ADD 0, and compares equal. Minimal-encoding checks stay off. | +| `num-max-roundtrip-tapscript` | The 4-byte maximum positive script number decodes, survives ADD 0, and compares equal. Minimal-encoding checks stay off. | +| `num-5byte-arith-legacy` | Arithmetic rejects a 5-byte number. CLTV and CSV are the opcodes that allow 5. | +| `num-5byte-arith-v0` | Arithmetic rejects a 5-byte number. CLTV and CSV are the opcodes that allow 5. | +| `num-5byte-arith-tapscript` | Arithmetic rejects a 5-byte number. CLTV and CSV are the opcodes that allow 5. | +| `add-result-may-be-wide-legacy` | ADD of 2147483647 and 1 accepts. The sum does not fit in 4 bytes and stays on the stack for later. | +| `add-result-may-be-wide-v0` | ADD of 2147483647 and 1 accepts. The sum does not fit in 4 bytes and stays on the stack for later. | +| `add-result-may-be-wide-tapscript` | ADD of 2147483647 and 1 accepts. The sum does not fit in 4 bytes and stays on the stack for later. | +| `add-wide-result-not-reused-legacy` | That wide sum rejects when a later arithmetic opcode decodes it. | +| `add-wide-result-not-reused-v0` | That wide sum rejects when a later arithmetic opcode decodes it. | +| `add-wide-result-not-reused-tapscript` | That wide sum rejects when a later arithmetic opcode decodes it. | +| `add-two-max-legacy` | ADD of two 4-byte maximums accepts. The sum is wider than 4 bytes and is not itself an error. | +| `add-two-max-v0` | ADD of two 4-byte maximums accepts. The sum is wider than 4 bytes and is not itself an error. | +| `add-two-max-tapscript` | ADD of two 4-byte maximums accepts. The sum is wider than 4 bytes and is not itself an error. | +| `sub-underflow-wide-legacy` | SUB of 0 minus the 4-byte maximum accepts and leaves a negative wide result. | +| `sub-underflow-wide-v0` | SUB of 0 minus the 4-byte maximum accepts and leaves a negative wide result. | +| `sub-underflow-wide-tapscript` | SUB of 0 minus the 4-byte maximum accepts and leaves a negative wide result. | +| `negate-negzero-legacy` | Four-byte 0x00000080 is negative zero when minimal checks are off. Negating it is 0. | +| `negate-negzero-v0` | Four-byte 0x00000080 is negative zero when minimal checks are off. Negating it is 0. | +| `negate-negzero-tapscript` | Four-byte 0x00000080 is negative zero when minimal checks are off. Negating it is 0. | +| `negate-i32-min-5byte-legacy` | The 5-byte encoding of negative 2^31 is not a 4-byte script number. NEGATE rejects it. | +| `negate-i32-min-5byte-v0` | The 5-byte encoding of negative 2^31 is not a 4-byte script number. NEGATE rejects it. | +| `negate-i32-min-5byte-tapscript` | The 5-byte encoding of negative 2^31 is not a 4-byte script number. NEGATE rejects it. | +| `zero-negzero-numequal-legacy` | 0 and negative zero (0x80) are equal as numbers when minimal encoding is not required. | +| `zero-negzero-numequal-v0` | 0 and negative zero (0x80) are equal as numbers when minimal encoding is not required. | +| `zero-negzero-numequal-tapscript` | 0 and negative zero (0x80) are equal as numbers when minimal encoding is not required. | +| `zero-negzero-equal-legacy` | The same two values are not equal as byte strings under OP_EQUAL. | +| `zero-negzero-equal-v0` | The same two values are not equal as byte strings under OP_EQUAL. | +| `zero-negzero-equal-tapscript` | The same two values are not equal as byte strings under OP_EQUAL. | +| `within-inside-legacy` | WITHIN is inclusive of the low bound. | +| `within-inside-v0` | WITHIN is inclusive of the low bound. | +| `within-inside-tapscript` | WITHIN is inclusive of the low bound. | +| `within-low-legacy` | WITHIN accepts the low bound itself. | +| `within-low-v0` | WITHIN accepts the low bound itself. | +| `within-low-tapscript` | WITHIN accepts the low bound itself. | +| `within-high-legacy` | WITHIN rejects the high bound. | +| `within-high-v0` | WITHIN rejects the high bound. | +| `within-high-tapscript` | WITHIN rejects the high bound. | +| `pick-zero-legacy` | PICK index 0 copies the top item. DROP leaves that one true item. | +| `pick-zero-v0` | PICK index 0 copies the top item. DROP leaves that one true item. | +| `pick-zero-tapscript` | PICK index 0 copies the top item. DROP leaves that one true item. | +| `pick-negative-legacy` | PICK index -1 rejects. | +| `pick-negative-v0` | PICK index -1 rejects. | +| `pick-negative-tapscript` | PICK index -1 rejects. | +| `pick-depth-legacy` | PICK index equal to the remaining stack depth rejects. | +| `pick-depth-v0` | PICK index equal to the remaining stack depth rejects. | +| `pick-depth-tapscript` | PICK index equal to the remaining stack depth rejects. | +| `roll-zero-legacy` | ROLL index 0 leaves the same one item. | +| `roll-zero-v0` | ROLL index 0 leaves the same one item. | +| `roll-zero-tapscript` | ROLL index 0 leaves the same one item. | +| `roll-negative-legacy` | ROLL index -1 rejects. | +| `roll-negative-v0` | ROLL index -1 rejects. | +| `roll-negative-tapscript` | ROLL index -1 rejects. | +| `roll-depth-legacy` | ROLL index equal to the remaining stack depth rejects. | +| `roll-depth-v0` | ROLL index equal to the remaining stack depth rejects. | +| `roll-depth-tapscript` | ROLL index equal to the remaining stack depth rejects. | +| `if-minimal-true-legacy` | IF of a single 0x01 takes the branch. | +| `if-minimal-true-v0` | IF of a single 0x01 takes the branch. | +| `if-minimal-true-tapscript` | IF of a single 0x01 takes the branch. | +| `if-minimal-empty-legacy` | IF of an empty vector is false and is a minimal argument in every signature version. | +| `if-minimal-empty-v0` | IF of an empty vector is false and is a minimal argument in every signature version. | +| `if-minimal-empty-tapscript` | IF of an empty vector is false and is a minimal argument in every signature version. | +| `minimalif-00-legacy` | A bare script ignores MINIMALIF. A single 0x00 is false, the branch is skipped, and the trailing OP_1 accepts. | +| `minimalif-00-v0-off` | Witness v0 accepts a non-minimal IF argument when MINIMALIF is off. | +| `minimalif-00-v0-on` | Witness v0 rejects a single 0x00 IF argument when MINIMALIF is on. | +| `minimalif-00-tapscript` | Tapscript rejects a single 0x00 IF argument even when the MINIMALIF flag is off. | +| `minimalif-negzero-tapscript` | Tapscript rejects negative zero as an IF argument. | +| `minimalif-negzero-v0-off` | Witness v0 accepts negative zero as a false IF argument when MINIMALIF is off. | +| `minimalif-02-legacy` | A bare script with MINIMALIF still accepts OP_2 as an IF argument. | +| `minimalif-02-tapscript` | Tapscript rejects OP_2 as an IF argument. The only minimal true byte is 0x01. | +| `bool-leading-zero-legacy` | cast_to_bool is true when any byte is non-zero, including a leading zero. | +| `bool-leading-zero-v0` | cast_to_bool is true when any byte is non-zero, including a leading zero. | +| `bool-leading-zero-tapscript` | Tapscript MINIMALIF rejects that two-byte true value before cast_to_bool. The only minimal true argument is a single 0x01. | +| `bool-negzero-legacy` | Negative zero is false, so IF takes the ELSE branch. | +| `bool-negzero-v0` | Witness v0 treats negative zero as false when MINIMALIF is off. | +| `unexec-does-not-push-legacy` | An unexecuted IF branch does not push. ELSE leaves the single true item. | +| `unexec-does-not-push-v0` | An unexecuted IF branch does not push. ELSE leaves the single true item. | +| `unexec-does-not-push-tapscript` | An unexecuted IF branch does not push. ELSE leaves the single true item. | +| `minimaldata-unexec-legacy` | MINIMALDATA does not apply inside an unexecuted IF. | +| `minimaldata-exec-legacy` | MINIMALDATA rejects an executed push of 0x01 that is not OP_1. | +| `minimaldata-unexec-v0` | Witness v0 MINIMALDATA does not apply inside an unexecuted IF. | +| `minimaldata-exec-v0` | Witness v0 MINIMALDATA rejects an executed non-minimal push. | +| `unexec-checksigverify-legacy` | CHECKSIGVERIFY in an unexecuted branch does not run. | +| `unexec-checksigverify-v0` | CHECKSIGVERIFY in an unexecuted branch does not run. | +| `unexec-checksigverify-tapscript` | CHECKSIGVERIFY in an unexecuted branch does not run. | +| `exec-checksigverify-empty-legacy` | CHECKSIGVERIFY of an empty signature rejects when the branch runs. | +| `exec-checksigverify-empty-v0` | CHECKSIGVERIFY of an empty signature rejects when the branch runs. | +| `exec-checksigverify-empty-tapscript` | CHECKSIGVERIFY of an empty signature rejects when the branch runs. | + +Core `script_tests.json` already has both an accept and a reject for NOP, VERIFY, TOALTSTACK, FROMALTSTACK, 2DROP, 2DUP, 3DUP, 2OVER, 2ROT, 2SWAP, IFDUP, DEPTH, DROP, DUP, NIP, OVER, PICK, ROLL, ROT, SWAP, TUCK, and SIZE. Those success arms are not duplicated here. The rows below are the boundary pairs this corpus names itself. + +| Id | Predicate | +|----|-----------| +| `stack-underflow-drop` | One empty-stack underflow through the shared pop: DROP with nothing on the stack rejects. | +| `stack-2rot-6` | 2ROT with 6 items accepts. The top item is the original second value and is true. | +| `stack-2rot-5` | 2ROT with 5 items rejects. | +| `stack-fromalt-ok` | TOALTSTACK then FROMALTSTACK returns the same true item. | +| `stack-fromalt-empty` | FROMALTSTACK on an empty altstack rejects. | + +## Checksig, multisig, find-and-delete, and sighash + +An optional `spend` object sets `version`, `locktime`, `sequence`, and `n_outputs` on the spending transaction only. A missing object is version 1, locktime 0, sequence `0xffffffff`, and one output. `version` is the consensus i32 bit pattern. + +Unknown hashtype bytes are a STRICTENC check. DERSIG checks the DER encoding and still accepts hashtype `0x04`. LOW_S stays off. + +FindAndDelete is observed with an empty signature. Its needle is the single byte `OP_0`. A verifying signature is not placed in `scriptPubKey`, because this credit template would make that signature commit to a txid that already contains it. A `0x00` buried in a push is the off-boundary case. A signature longer than `scriptCode` is the no-op already covered by `sighash-all-legacy`. + +CHECKSIGVERIFY of an empty signature is `exec-checksigverify-empty-legacy`, `exec-checksigverify-empty-v0`, and `exec-checksigverify-empty-tapscript`. The new rows are the CHECKSIG continue side. + +Tapscript validation weight: one non-empty CHECKSIGADD against a 1-byte pubkey accepts, two exceed the budget, and the same count of empty signatures still accepts. + +| Id | Predicate | +|----|-----------| +| `hash-sha1-empty` | OP_sha1 of empty matches the known digest. | +| `hash-sha1-abc` | OP_sha1 of abc matches the known digest. | +| `hash-sha256-empty` | OP_sha256 of empty matches the known digest. | +| `hash-sha256-abc` | OP_sha256 of abc matches the known digest. | +| `hash-ripemd160-empty` | OP_ripemd160 of empty matches the known digest. | +| `hash-ripemd160-abc` | OP_ripemd160 of abc matches the known digest. | +| `hash-hash160-empty` | OP_hash160 of empty matches the known digest. | +| `hash-hash160-abc` | OP_hash160 of abc matches the known digest. | +| `hash-hash256-empty` | OP_hash256 of empty matches the known digest. | +| `hash-hash256-abc` | OP_hash256 of abc matches the known digest. | +| `hash-sha256-abc-mismatch` | SHA256 of abc compared to 32 zero bytes rejects. | +| `sighash-all-legacy` | Legacy CHECKSIG accepts SIGHASH all with LOW_S off. | +| `sighash-all-v0` | Witness v0 CHECKSIG accepts SIGHASH all. | +| `sighash-none-legacy` | Legacy CHECKSIG accepts SIGHASH none with LOW_S off. | +| `sighash-none-v0` | Witness v0 CHECKSIG accepts SIGHASH none. | +| `sighash-single-legacy` | Legacy CHECKSIG accepts SIGHASH single with LOW_S off. An in-range SINGLE digest is not uint256 one. | +| `sighash-single-v0` | Witness v0 CHECKSIG accepts SIGHASH single. | +| `sighash-all-acp-legacy` | Legacy CHECKSIG accepts SIGHASH all-acp with LOW_S off. | +| `sighash-all-acp-v0` | Witness v0 CHECKSIG accepts SIGHASH all-acp. | +| `sighash-none-acp-legacy` | Legacy CHECKSIG accepts SIGHASH none-acp with LOW_S off. | +| `sighash-none-acp-v0` | Witness v0 CHECKSIG accepts SIGHASH none-acp. | +| `sighash-single-acp-legacy` | Legacy CHECKSIG accepts SIGHASH single-acp with LOW_S off. An in-range SINGLE digest is not uint256 one. | +| `sighash-single-acp-v0` | Witness v0 CHECKSIG accepts SIGHASH single-acp. | +| `sighash-wrongtype-legacy` | A legacy signature signed as ALL and rewritten as NONE rejects. | +| `sighash-wrongtype-v0` | A witness v0 signature signed as ALL and rewritten as NONE rejects. | +| `sighash-single-past-legacy` | Legacy SIGHASH_SINGLE with no output hashes uint256 one and the signature of that digest accepts. | +| `sighash-single-past-v0` | Witness v0 SIGHASH_SINGLE with no output hashes the BIP143 empty-output digest, not uint256 one. | +| `sighash-type04-dersig-legacy` | DERSIG alone accepts a defined-DER signature whose hashtype byte is 0x04. | +| `sighash-type04-strictenc-legacy` | STRICTENC rejects hashtype 0x04. LOW_S stays off. | +| `sighash-type04-dersig-v0` | Witness v0 DERSIG alone accepts hashtype 0x04. | +| `sighash-type04-strictenc-v0` | Witness v0 STRICTENC rejects hashtype 0x04. | +| `dersig-off-nondet-legacy` | With DERSIG and LOW_S off, a non-minimal S that the lax parser accepts still verifies. | +| `dersig-on-nondet-legacy` | DERSIG rejects that non-minimal S. LOW_S stays off. | +| `dersig-off-nondet-v0` | Witness v0 with DERSIG off accepts the same non-minimal S. | +| `dersig-on-nondet-v0` | Witness v0 DERSIG rejects the non-minimal S. | +| `checksig-empty-continues-legacy` | An empty legacy signature is false, not an encoding failure, so CHECKSIG NOT leaves true. | +| `checksig-empty-continues-v0` | An empty witness v0 signature is false, so CHECKSIG NOT leaves true. | +| `checksig-badenc-dersig-off-legacy` | With DERSIG off, a non-empty signature the lax parser rejects is false and CHECKSIG NOT leaves true. | +| `checksig-badenc-dersig-on-legacy` | DERSIG rejects a non-empty non-DER signature before CHECKSIG can push false. | +| `checksig-badenc-dersig-off-v0` | Witness v0 with DERSIG off treats a non-DER signature as false. | +| `checksig-badenc-dersig-on-v0` | Witness v0 DERSIG rejects a non-DER signature. | +| `ecdsa-legacy-sig-on-v0` | The legacy ECDSA signature does not verify under the witness v0 sighash. | +| `ecdsa-v0-sig-on-legacy` | The witness v0 ECDSA signature does not verify under the legacy sighash. | +| `fad-empty-keeps-fail-legacy` | An empty signature deletes the aligned OP_0. A signature of the undeleted script then misses, the bad encoding is not tried, and NOT leaves true. | +| `fad-empty-deleted-match-legacy` | A signature of the script after that OP_0 is removed matches, so DERSIG rejects the bad encoding that the walk then tries. | +| `fad-v0-keeps-op0-match` | Witness v0 does not FindAndDelete, so the signature of the full script matches and the bad encoding is tried. | +| `fad-v0-keeps-op0-miss` | Witness v0 keeps the OP_0, so a signature of the shortened script misses and NOT leaves true. | +| `fad-offboundary-not-removed-legacy` | A 0x00 inside a push is not an empty-signature OP_0. The signature of the full script matches and the bad encoding is tried. | +| `fad-offboundary-as-if-deleted-legacy` | That buried 0x00 stays, so a signature of the shortened script misses and NOT leaves true. | +| `codesep-suffix-legacy` | Legacy OP_CODESEPARATOR drops the prefix from scriptCode. A signature of the suffix accepts. | +| `codesep-prefix-legacy` | A signature of the pre-separator script rejects once OP_CODESEPARATOR truncates scriptCode. | +| `codesep-suffix-v0` | Witness v0 OP_CODESEPARATOR drops the prefix from scriptCode. | +| `codesep-prefix-v0` | Witness v0 rejects a signature of the script from before OP_CODESEPARATOR. | +| `sighash-default-tap` | Tapscript CHECKSIG accepts sighash default. | +| `sighash-all-tap` | Tapscript CHECKSIG accepts sighash all. | +| `sighash-none-tap` | Tapscript CHECKSIG accepts sighash none. | +| `sighash-single-tap` | Tapscript CHECKSIG accepts sighash single. | +| `sighash-all-acp-tap` | Tapscript CHECKSIG accepts sighash all-acp. | +| `sighash-none-acp-tap` | Tapscript CHECKSIG accepts sighash none-acp. | +| `sighash-single-acp-tap` | Tapscript CHECKSIG accepts sighash single-acp. | +| `sighash-wrongtype-tap` | A tapscript signature signed as ALL and rewritten as NONE fails the check. | +| `sighash-type00-tap` | A 65-byte tapscript signature with hashtype 0x00 fails. | +| `sighash-type04-tap` | Tapscript rejects hashtype 0x04. | +| `sighash-single-past-tap` | Tapscript SIGHASH_SINGLE with no output at that input rejects instead of hashing uint256 one. | +| `checksig-empty-continues-tap` | An empty tapscript signature is false, so CHECKSIG NOT leaves true. | +| `checksig-invalid-tap` | A non-empty invalid tapscript signature is a hard failure. | +| `checksig-empty-pubkey-tap` | Tapscript CHECKSIG with an empty pubkey fails. | +| `checksig-unknown-pubkey-tap` | A tapscript pubkey that is not 32 bytes succeeds for a non-empty signature (upgrade hook). | +| `checksigadd-valid-tap` | CHECKSIGADD of a valid signature adds one. | +| `checksigadd-empty-tap` | CHECKSIGADD of an empty signature pushes n unchanged. | +| `checksigadd-invalid-tap` | CHECKSIGADD of a non-empty invalid signature fails. | +| `tap-weight-pass` | Tapscript validation weight still accepts one non-empty signature check. | +| `tap-weight-fail` | One more non-empty signature check (2) exceeds the tapscript weight budget. | +| `tap-weight-empty-free` | Empty tapscript signatures do not consume validation weight. | +| `codesep-pos0-tap` | Tapscript OP_CODESEPARATOR records instruction index 0, and a signature of that position accepts. | +| `codesep-ignored-tap` | A tapscript signature that omits the executed OP_CODESEPARATOR position fails. | +| `multisig-m0-n0-legacy` | CHECKMULTISIG with m = 0 and n = 0 accepts. | +| `multisig-m0-n0-v0` | Witness v0 CHECKMULTISIG with m = 0 and n = 0 accepts. | +| `multisig-n21-legacy` | CHECKMULTISIG rejects n = 21. | +| `multisig-n21-v0` | Witness v0 CHECKMULTISIG rejects n = 21. | +| `multisig-m-gt-n-legacy` | CHECKMULTISIG rejects m > n. | +| `multisig-m-negative-legacy` | CHECKMULTISIG rejects a negative m. | +| `multisig-m-negative-v0` | Witness v0 CHECKMULTISIG rejects a negative m. | +| `multisig-m20-n20-legacy` | CHECKMULTISIG with m = n = 20 accepts. The 20 keys stay inside the opcode budget. | +| `multisig-m20-n20-v0` | Witness v0 CHECKMULTISIG with m = n = 20 accepts. | +| `multisig-unused-badenc-legacy` | A bad encoding on a signature CHECKMULTISIG never tries is ignored, and NOT turns the failed match into true. | +| `multisig-tried-badenc-legacy` | DERSIG rejects a bad encoding on a signature CHECKMULTISIG tries. | +| `multisig-unused-badenc-v0` | Witness v0 skips encoding checks for a signature the multisig walk does not reach. | +| `multisig-tried-badenc-v0` | Witness v0 DERSIG rejects a bad encoding on a signature the walk tries. | +| `nulldummy-off-legacy` | Legacy CHECKMULTISIG accepts a non-empty dummy when NULLDUMMY is off. | +| `nulldummy-on-legacy` | Legacy CHECKMULTISIG rejects a non-empty dummy when NULLDUMMY is on. | +| `nulldummy-off-v0` | Witness v0 accepts a non-empty dummy when NULLDUMMY is off. The flag rejects it, not the signature version. | +| `nulldummy-on-v0` | Witness v0 rejects a non-empty dummy when NULLDUMMY is on. | +| `nulldummy-cms-tap` | Tapscript CHECKMULTISIG fails before the dummy is interpreted. | +| `nulldummy-cmsverify-tap` | Tapscript CHECKMULTISIGVERIFY fails before the dummy is interpreted. | +| `multisig-m-gt-n-v0` | Witness v0 CHECKMULTISIG rejects m > n. | + +## CLTV and CSV + +`OP_CLTV` and `OP_CSV` are the same opcodes in every signature version. The rows are bare scripts, plus witness v0 copies of the negative locktime, the equal height, and the version compare. A missing `spend` object keeps version 1, locktime 0, sequence `0xffffffff`, and one output. `version` is the consensus i32 bit pattern, compared as an unsigned value. + +| Id | Predicate | +|----|-----------| +| `cltv-off-does-not-pop` | With CHECKLOCKTIMEVERIFY off, OP_CLTV is a NOP and does not pop. | +| `csv-off-does-not-pop` | With CHECKSEQUENCEVERIFY off, OP_CSV is a NOP and does not pop. | +| `cltv-off-negative-nop` | Flag-off OP_CLTV leaves a negative number on the stack. DROP can still remove it. | +| `csv-off-negative-nop` | Flag-off OP_CSV leaves a negative number on the stack. | +| `cltv-negative` | OP_CLTV rejects a negative locktime. | +| `csv-negative` | OP_CSV rejects a negative sequence argument. | +| `cltv-5byte-ok` | A 5-byte locktime that still fits is accepted when minimal checks are off. | +| `cltv-6byte` | A 6-byte locktime is rejected. | +| `csv-5byte-ok` | A 5-byte sequence argument that still fits is accepted when minimal checks are off. | +| `csv-6byte` | A 6-byte sequence argument is rejected. | +| `cltv-type-mismatch-time-vs-height` | A time locktime against a height locktime rejects. The threshold is 500000000. | +| `cltv-type-mismatch-height-vs-time` | A height locktime against a time locktime rejects. | +| `cltv-equal-height` | OP_CLTV accepts a height equal to the transaction locktime. | +| `cltv-greater-height` | OP_CLTV rejects a height one above the transaction locktime. | +| `cltv-equal-time` | OP_CLTV accepts a time locktime equal to the transaction locktime. | +| `cltv-greater-time` | OP_CLTV rejects a time locktime one above the transaction locktime. | +| `cltv-final-sequence` | OP_CLTV rejects a final nSequence even when the locktime matches. | +| `cltv-sequence-not-final` | OP_CLTV accepts locktime 0 when nSequence is not final. | +| `csv-disable-bit-skips-version` | The CSV disable bit succeeds and does not apply the version check. | +| `csv-version-below-2` | With the disable bit clear, a transaction version below 2 rejects. | +| `csv-version-ffffffff` | Version 0xFFFFFFFF passes the unsigned version compare. It is not below 2. | +| `csv-equal` | OP_CSV accepts a matching sequence type and value. | +| `csv-one-less` | OP_CSV rejects a sequence value one below the argument. | +| `csv-type-mismatch` | OP_CSV rejects a type-bit mismatch. | +| `csv-type-match` | OP_CSV accepts when the type bit and the value both match. | +| `csv-input-disable` | OP_CSV rejects when the input sequence has its disable bit set. | +| `cltv-negative-v0` | Witness v0 OP_CLTV rejects a negative locktime. | +| `cltv-equal-height-v0` | Witness v0 OP_CLTV accepts a matching height. | +| `csv-version-below-2-v0` | Witness v0 OP_CSV rejects version 1. | +| `csv-version-ffffffff-v0` | Witness v0 OP_CSV accepts version 0xFFFFFFFF. | + +## Spend dispatch and fast paths + +BIP16 and Taproot exception hashes change which scripts run. They are block-hash rules, not a `VerifyScript` row. `exception_hashes_change_which_scripts_run` pins both hashes. `corpus_fast_paths_call_typed_verifiers` calls `p2pkh::verify`, `p2wpkh::verify`, and `p2tr::verify` on the same credit and spend as these rows. A one-byte change to the P2PKH template leaves that template. A one-byte change to a P2WPKH program stays a 20-byte v0 program and misses the pubkey hash. + +| Id | Predicate | +|----|-----------| +| `p2sh-on-executes-true` | P2SH on executes a push-only true redeem. | +| `p2sh-on-executes-false` | P2SH on executes a push-only false redeem and rejects it. | +| `p2sh-off-skips-false` | P2SH off checks the scriptPubKey hash only and does not execute the false redeem. | +| `p2sh-on-not-push-only` | A non-push-only scriptSig does not execute the redeem. P2SH rejects it. | +| `p2sh-off-not-push-only` | With P2SH off, a non-push-only scriptSig still runs and the hash template can accept. | +| `wit-v0-20-empty` | An empty witness on a 20-byte v0 program rejects when WITNESS is on. | +| `wit-v0-21` | A v0 program whose length is not 20 or 32 rejects. | +| `wit-v0-32-true` | A 32-byte v0 program runs the witness script. OP_1 accepts. | +| `wit-v1-33-anyone` | A v1 program of a length other than 32 is anyone-can-spend while discourage bits are off. | +| `wit-v1-33-discourage` | DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM rejects that non-32 v1 program. | +| `wit-v2-32-anyone` | A witness version above 1 is anyone-can-spend while discourage bits are off. | +| `wit-v2-32-discourage` | DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM rejects a witness version above 1. | +| `p2pkh-fast-ok` | Exact P2PKH scriptSig takes the typed verifier and accepts. | +| `p2pkh-fast-mutated` | Changing one template byte drops P2PKH. The bare script rejects. | +| `p2pkh-fad-collision` | A signature push equal to the 20-byte pubkey hash is not a verifying signature. Both engines reject it. | +| `p2wpkh-fast-ok` | Native P2WPKH takes the typed verifier and accepts. | +| `p2wpkh-fast-mutated` | Changing one program byte makes the pubkey hash miss. P2WPKH rejects. | +| `p2tr-keypath-ok` | A 32-byte v1 key path takes the typed taproot verifier and accepts. | +| `p2tr-keypath-mutated` | Changing one output-key byte makes the key path miss. | +| `tapleaf-unknown-521` | An unknown tapleaf version succeeds without running the leaf, so a 521-byte element is ignored. | +| `tapleaf-unknown-1001` | An unknown tapleaf version succeeds without running the leaf, so 1001 stack items are ignored. | +| `tapleaf-known-521` | A known tapscript leaf rejects a 521-byte element. | +| `tapleaf-known-1001` | A known tapscript leaf rejects 1001 stack items. | +| `p2sh-witness-unexpected` | A non-empty witness on a legacy P2SH redeem is rejected. | +| `p2sh-witness-empty-script` | P2SH with an empty scriptSig does not execute a redeem. WITNESS does not change that. | +| `p2wpkh-low-s-witness-len` | LOW_S sends P2WPKH through the interpreter, which still rejects a one-item witness. | +| `checksigverify-empty-32-tap` | Tapscript CHECKSIGVERIFY rejects an empty signature for a 32-byte key. | +| `schnorr-bad-len-tap` | A tapscript signature that is neither 64 nor 65 bytes fails CHECKSIG. | diff --git a/crates/rbitcoin-consensus/tests/fixtures/script_corpus/script_tests.json b/crates/rbitcoin-consensus/tests/fixtures/script_corpus/script_tests.json new file mode 100644 index 000000000..f14959b21 --- /dev/null +++ b/crates/rbitcoin-consensus/tests/fixtures/script_corpus/script_tests.json @@ -0,0 +1,13076 @@ +[ + { + "id": "smoke-op-1", + "row": [ + "", + "1", + "NONE", + "OK" + ] + }, + { + "id": "script-len-10000-legacy", + "row": [ + "", + "0x4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000756161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "NONE", + "OK" + ] + }, + { + "id": "script-len-10000-v0", + "row": [ + [ + "4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000756161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + 0.0 + ], + "", + "0x002027209a9026a70ec8b76eab8ecdebe071040e1204bc6eef4af54d3a3a9eb57bda", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "script-len-10000-tapscript", + "row": [ + [ + "#SCRIPT# 0x4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000756161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "script-len-10001-legacy", + "row": [ + "", + "0x4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "NONE", + "ERR" + ] + }, + { + "id": "script-len-10001-v0", + "row": [ + [ + "4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + 0.0 + ], + "", + "0x0020e3a1870e58331bff7f26672118dba690743624a88fa48982d437e2a5835fffc5", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "script-len-10001-tapscript", + "row": [ + [ + "#SCRIPT# 0x4d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d080200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000754d08020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "push-520-legacy", + "row": [ + "", + "0x4d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + "NONE", + "OK" + ] + }, + { + "id": "push-520-v0", + "row": [ + [ + "4d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + 0.0 + ], + "", + "0x0020bb62bf47644e5fc9f766221de4f7dc74bacb8d06a1ec0881534db5c783d4340f", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "push-520-tapscript", + "row": [ + [ + "#SCRIPT# 0x4d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "push-521-legacy", + "row": [ + "", + "0x4d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + "NONE", + "ERR" + ] + }, + { + "id": "push-521-v0", + "row": [ + [ + "4d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + 0.0 + ], + "", + "0x0020f51c82aec6bf9e89cc5431b7df8cd8213d809f029aa01ad556458f49cceec10d", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "push-521-tapscript", + "row": [ + [ + "#SCRIPT# 0x4d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117551", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "push-520-unexec-legacy", + "row": [ + "", + "0x00634d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + "NONE", + "OK" + ] + }, + { + "id": "push-520-unexec-v0", + "row": [ + [ + "00634d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + 0.0 + ], + "", + "0x00200eae9048074762cc4f448fa5fae824796d367d10198a6fc87c96d1f4976f7308", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "push-520-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00634d0802111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "push-521-unexec-legacy", + "row": [ + "", + "0x00634d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + "NONE", + "ERR" + ] + }, + { + "id": "push-521-unexec-v0", + "row": [ + [ + "00634d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + 0.0 + ], + "", + "0x0020edad78e1054155cd367944bc50cd0de45c88487f06be5cefee0e68d2caff6098", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "push-521-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00634d090211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "ops-201-legacy", + "row": [ + "", + "0x61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "NONE", + "OK" + ] + }, + { + "id": "ops-201-v0", + "row": [ + [ + "61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + 0.0 + ], + "", + "0x00202265307e74279c65200b1857ad44e64c01cc28e434065d8c468b3208a3d36e9b", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "ops-201-tapscript", + "row": [ + [ + "#SCRIPT# 0x61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "ops-202-legacy", + "row": [ + "", + "0x6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "NONE", + "ERR" + ] + }, + { + "id": "ops-202-v0", + "row": [ + [ + "6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + 0.0 + ], + "", + "0x002073a0a078cb5f8f39cffbaeac999da2572e65229ef9cf4510cfa765bfe1aa1854", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "ops-202-tapscript", + "row": [ + [ + "#SCRIPT# 0x6161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616151", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "ops-unexec-201-legacy", + "row": [ + "", + "0x0063616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + "NONE", + "OK" + ] + }, + { + "id": "ops-unexec-201-v0", + "row": [ + [ + "0063616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + 0.0 + ], + "", + "0x002046a8d3d63d59a7615c72ab521671a9b317954f915e3ed6ce68aa34adcfa21119", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "ops-unexec-201-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "ops-unexec-202-legacy", + "row": [ + "", + "0x006361616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + "NONE", + "ERR" + ] + }, + { + "id": "ops-unexec-202-v0", + "row": [ + [ + "006361616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + 0.0 + ], + "", + "0x002036a4e9ff318ce6e33f6b30102007962a01094869dde3c77c8627c32d523dd55f", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "ops-unexec-202-tapscript", + "row": [ + [ + "#SCRIPT# 0x006361616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "op16-excluded-legacy", + "row": [ + "", + "0x60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + "NONE", + "OK" + ] + }, + { + "id": "op16-excluded-v0", + "row": [ + [ + "60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + 0.0 + ], + "", + "0x00209ea4f9e98fb9aab77897230b58327cdf2de49ac3c7056f40a50b394554f960eb", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "op16-excluded-tapscript", + "row": [ + [ + "#SCRIPT# 0x60606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060606060757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "trunc-pushdata1-legacy", + "row": [ + "", + "0x4c", + "NONE", + "ERR" + ] + }, + { + "id": "trunc-pushdata1-v0", + "row": [ + [ + "4c", + 0.0 + ], + "", + "0x002072dfcfb0c470ac255cde83fb8fe38de8a128188e03ea5ba5b2a93adbea1062fa", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "trunc-pushdata1-tapscript", + "row": [ + [ + "#SCRIPT# 0x4c", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "trunc-pushdata2-legacy", + "row": [ + "", + "0x4d0100", + "NONE", + "ERR" + ] + }, + { + "id": "trunc-pushdata2-v0", + "row": [ + [ + "4d0100", + 0.0 + ], + "", + "0x0020d1b6137dfc83f2902719c9122be78cbfa02f992a69d2ab83291e728d00d1d000", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "trunc-pushdata2-tapscript", + "row": [ + [ + "#SCRIPT# 0x4d0100", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "trunc-pushdata4-legacy", + "row": [ + "", + "0x4e01000000", + "NONE", + "ERR" + ] + }, + { + "id": "trunc-pushdata4-v0", + "row": [ + [ + "4e01000000", + 0.0 + ], + "", + "0x002074a7f5908b83a5d36ff540f21ad4a4c4432e02ff2717a6bbb94681d55ade1231", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "trunc-pushdata4-tapscript", + "row": [ + [ + "#SCRIPT# 0x4e01000000", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "else-empty-legacy", + "row": [ + "", + "0x67", + "NONE", + "ERR" + ] + }, + { + "id": "else-empty-v0", + "row": [ + [ + "67", + 0.0 + ], + "", + "0x0020cd0aa9856147b6c5b4ff2b7dfee5da20aa38253099ef1b4a64aced233c9afe29", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "else-empty-tapscript", + "row": [ + [ + "#SCRIPT# 0x67", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "endif-empty-legacy", + "row": [ + "", + "0x68", + "NONE", + "ERR" + ] + }, + { + "id": "endif-empty-v0", + "row": [ + [ + "68", + 0.0 + ], + "", + "0x0020aaa9402664f1a41f40ebbc52c9993eb66aeb366602958fdfaa283b71e64db123", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "endif-empty-tapscript", + "row": [ + [ + "#SCRIPT# 0x68", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "if-unclosed-legacy", + "row": [ + "", + "0x5163", + "NONE", + "ERR" + ] + }, + { + "id": "if-unclosed-v0", + "row": [ + [ + "5163", + 0.0 + ], + "", + "0x0020ab9ca42e51fa7f12fd7ca85b6b52b50737055b3a9d2535aeea4c726a8b5b537f", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "if-unclosed-tapscript", + "row": [ + [ + "#SCRIPT# 0x5163", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "verif-unexec-legacy", + "row": [ + "", + "0x0063656851", + "NONE", + "ERR" + ] + }, + { + "id": "verif-unexec-v0", + "row": [ + [ + "0063656851", + 0.0 + ], + "", + "0x00203c9dab898d1a16c1c1766f82fe1b1759e21e30dcfe0a0a6a7257bfefc1477b1a", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "verif-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063656851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "vernotif-unexec-legacy", + "row": [ + "", + "0x0063666851", + "NONE", + "ERR" + ] + }, + { + "id": "vernotif-unexec-v0", + "row": [ + [ + "0063666851", + 0.0 + ], + "", + "0x0020190fa8813445ec39870e64d15518ade4d76e345b5d2335627cbba69a84bea1f7", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "vernotif-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063666851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "stack-1000-legacy", + "row": [ + "", + "0x51515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + "NONE", + "OK" + ] + }, + { + "id": "stack-1001-legacy", + "row": [ + "", + "0x5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + "NONE", + "ERR" + ] + }, + { + "id": "stack-alt-1000-legacy", + "row": [ + "", + "0x5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151516b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b51515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + "NONE", + "OK" + ] + }, + { + "id": "stack-alt-1001-legacy", + "row": [ + "", + "0x5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151516b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + "NONE", + "ERR" + ] + }, + { + "id": "stack-1001-v0", + "row": [ + [ + "5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + 0.0 + ], + "", + "0x0020fb442010466c3db320606a6a1f070dcbe1d30c3fbd548282269345d62cba33c8", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "stack-exec-1000-tapscript", + "row": [ + [ + "#SCRIPT# 0x51515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "stack-exec-1001-tapscript", + "row": [ + [ + "#SCRIPT# 0x5151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "disabled-cat-unexec-legacy", + "row": [ + "", + "0x00637e6851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-cat-unexec-v0", + "row": [ + [ + "00637e6851", + 0.0 + ], + "", + "0x0020e28368442014443b12b1fb92a975324ae2c19d2cec1e1cb6ba0d1355b9c6344d", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-cat-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00637e6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-substr-unexec-legacy", + "row": [ + "", + "0x00637f6851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-substr-unexec-v0", + "row": [ + [ + "00637f6851", + 0.0 + ], + "", + "0x002028bd5b2d77ef7b703d732cc9ad85e7a80680ff8fadc62318433ba4c109265084", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-substr-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00637f6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-left-unexec-legacy", + "row": [ + "", + "0x0063806851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-left-unexec-v0", + "row": [ + [ + "0063806851", + 0.0 + ], + "", + "0x0020d8cb65a9a1751c20b8bf677cfa4f6a0cbf75c2705fc26ee8b03b89cf4ce917b2", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-left-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063806851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-right-unexec-legacy", + "row": [ + "", + "0x0063816851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-right-unexec-v0", + "row": [ + [ + "0063816851", + 0.0 + ], + "", + "0x0020efd6a9cfd94c32a4d268b4c0a5ab1736626fcb1aed58c7b0453bdd77d519c278", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-right-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063816851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-invert-unexec-legacy", + "row": [ + "", + "0x0063836851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-invert-unexec-v0", + "row": [ + [ + "0063836851", + 0.0 + ], + "", + "0x00204073635ef9d7295e5a3193affbadca3211f821579ee7f937432524fba875812b", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-invert-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063836851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-and-unexec-legacy", + "row": [ + "", + "0x0063846851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-and-unexec-v0", + "row": [ + [ + "0063846851", + 0.0 + ], + "", + "0x00202b1df96d5ec3cff03af26579b29604d80158e73ab281a9bf0dbe3d0c6e1f1750", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-and-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063846851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-or-unexec-legacy", + "row": [ + "", + "0x0063856851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-or-unexec-v0", + "row": [ + [ + "0063856851", + 0.0 + ], + "", + "0x002046261ece6c379a531f68e989f7654f760997067519c8d12eafb369756d098b68", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-or-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063856851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-xor-unexec-legacy", + "row": [ + "", + "0x0063866851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-xor-unexec-v0", + "row": [ + [ + "0063866851", + 0.0 + ], + "", + "0x0020405f32ed97f2712550e6d40bcbaed5524ca011f4a2c2cf7c9e5df4d433ae5f2f", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-xor-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063866851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-2mul-unexec-legacy", + "row": [ + "", + "0x00638d6851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-2mul-unexec-v0", + "row": [ + [ + "00638d6851", + 0.0 + ], + "", + "0x0020d51cb70114e03f256c82a17c4dfb2c683ae811c544ecf0ba36cb7349e76dc4b4", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-2mul-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00638d6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-2div-unexec-legacy", + "row": [ + "", + "0x00638e6851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-2div-unexec-v0", + "row": [ + [ + "00638e6851", + 0.0 + ], + "", + "0x002087b3907a982b23d78f679c8e78ab74be6fb814ea65e0c30b563af3a473ed6cbc", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-2div-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x00638e6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-mul-unexec-legacy", + "row": [ + "", + "0x0063956851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-mul-unexec-v0", + "row": [ + [ + "0063956851", + 0.0 + ], + "", + "0x00201629a085d0f448721b3dccdf17d119fb49c8b695275b067d247827bd3a8ae686", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-mul-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063956851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-div-unexec-legacy", + "row": [ + "", + "0x0063966851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-div-unexec-v0", + "row": [ + [ + "0063966851", + 0.0 + ], + "", + "0x0020fedf30c33808a996fd6a29a572a4cb4407dae82a617031dc33a0c2099609e529", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-div-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063966851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-mod-unexec-legacy", + "row": [ + "", + "0x0063976851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-mod-unexec-v0", + "row": [ + [ + "0063976851", + 0.0 + ], + "", + "0x0020e3a91824f9379fe1cbe45955aa5e73225a34c2772a69408fe62c1b0859e4a00e", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-mod-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063976851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-lshift-unexec-legacy", + "row": [ + "", + "0x0063986851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-lshift-unexec-v0", + "row": [ + [ + "0063986851", + 0.0 + ], + "", + "0x0020346f4a0337e2027010dbaeb25e8822c84b74f89a986355c5a85eaecc460ce393", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-lshift-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063986851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "disabled-rshift-unexec-legacy", + "row": [ + "", + "0x0063996851", + "NONE", + "ERR" + ] + }, + { + "id": "disabled-rshift-unexec-v0", + "row": [ + [ + "0063996851", + 0.0 + ], + "", + "0x00208b58fece01bc84d1b286524767fc1453c7a056e21727f08454ff4811ad657fec", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "disabled-rshift-unexec-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063996851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-reserved-legacy", + "row": [ + "", + "0x50", + "NONE", + "ERR" + ] + }, + { + "id": "exec-reserved-v0", + "row": [ + [ + "50", + 0.0 + ], + "", + "0x00205c62e091b8c0565f1bafad0dad5934276143ae2ccef7a5381e8ada5b1a8d26d2", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-reserved-tapscript", + "row": [ + [ + "#SCRIPT# 0x50", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-reserved-legacy", + "row": [ + "", + "0x0063506851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-reserved-v0", + "row": [ + [ + "0063506851", + 0.0 + ], + "", + "0x0020474611301e36173068becd17e74f84b85e4ddc3615f8267e2d612853cfed92bb", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-reserved-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063506851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-ver-legacy", + "row": [ + "", + "0x62", + "NONE", + "ERR" + ] + }, + { + "id": "exec-ver-v0", + "row": [ + [ + "62", + 0.0 + ], + "", + "0x00203e23e8160039594a33894f6564e1b1348bbd7a0088d42c4acb73eeaed59c009d", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-ver-tapscript", + "row": [ + [ + "#SCRIPT# 0x62", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-ver-legacy", + "row": [ + "", + "0x0063626851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-ver-v0", + "row": [ + [ + "0063626851", + 0.0 + ], + "", + "0x00202e16eb5ae78fd4d957a71ad4cd5a477ee1637e6931e4dd207eb644dba012fe78", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-ver-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063626851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-reserved1-legacy", + "row": [ + "", + "0x89", + "NONE", + "ERR" + ] + }, + { + "id": "exec-reserved1-v0", + "row": [ + [ + "89", + 0.0 + ], + "", + "0x0020e9b0c031f0493d3fd6b0b668260c79e7efe734bfd4b4115f9d82bc3be609c294", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-reserved1-tapscript", + "row": [ + [ + "#SCRIPT# 0x89", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-reserved1-legacy", + "row": [ + "", + "0x0063896851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-reserved1-v0", + "row": [ + [ + "0063896851", + 0.0 + ], + "", + "0x00200b8da9a09618e324609993cfad6daf1b481184ec0602756802ad0298e95dfb74", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-reserved1-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063896851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-reserved2-legacy", + "row": [ + "", + "0x8a", + "NONE", + "ERR" + ] + }, + { + "id": "exec-reserved2-v0", + "row": [ + [ + "8a", + 0.0 + ], + "", + "0x00202d3193691934124461809fb9bc7e671215099fc7d961bfbe31943d40d477c890", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-reserved2-tapscript", + "row": [ + [ + "#SCRIPT# 0x8a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-reserved2-legacy", + "row": [ + "", + "0x00638a6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-reserved2-v0", + "row": [ + [ + "00638a6851", + 0.0 + ], + "", + "0x002049cf089e55ca3bcdc13d8d9face69873c5f6f86cc268509e7ce83dadbb185559", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-reserved2-tapscript", + "row": [ + [ + "#SCRIPT# 0x00638a6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-success187-legacy", + "row": [ + "", + "0xbb", + "NONE", + "ERR" + ] + }, + { + "id": "exec-success187-v0", + "row": [ + [ + "bb", + 0.0 + ], + "", + "0x0020cbecda1c7d37d4c0aa5466243bb4a0018c31bf06d74fa7338290dd3068db4fed", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-success187-tapscript", + "row": [ + [ + "#SCRIPT# 0xbb", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-success187-legacy", + "row": [ + "", + "0x0063bb6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-success187-v0", + "row": [ + [ + "0063bb6851", + 0.0 + ], + "", + "0x0020e68a2bb04f703a7024d82071f46ae10a5c7cdbfc43291651624bb4e4f1c72b37", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-success187-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063bb6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-success254-legacy", + "row": [ + "", + "0xfe", + "NONE", + "ERR" + ] + }, + { + "id": "exec-success254-v0", + "row": [ + [ + "fe", + 0.0 + ], + "", + "0x0020aa687b58b0e73e2e383f8c500d75b591e188efe0168b3ffbcd3771caaa6dd4c7", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-success254-tapscript", + "row": [ + [ + "#SCRIPT# 0xfe", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "unexec-success254-legacy", + "row": [ + "", + "0x0063fe6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-success254-v0", + "row": [ + [ + "0063fe6851", + 0.0 + ], + "", + "0x002028336634e980fc2bebcec5eb04bbba351dd18af8d4a43b43bdbff59c1cab0cda", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-success254-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063fe6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-return-legacy", + "row": [ + "", + "0x6a", + "NONE", + "ERR" + ] + }, + { + "id": "exec-return-v0", + "row": [ + [ + "6a", + 0.0 + ], + "", + "0x0020189f40034be7a199f1fa9891668ee3ab6049f82d38c68be70f596eab2e1857b7", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-return-tapscript", + "row": [ + [ + "#SCRIPT# 0x6a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "unexec-return-legacy", + "row": [ + "", + "0x00636a6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-return-v0", + "row": [ + [ + "00636a6851", + 0.0 + ], + "", + "0x00204d8b9ccea8e3fa8635efe47095914d161770a3b0fd85758235a946c3950191a2", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-return-tapscript", + "row": [ + [ + "#SCRIPT# 0x00636a6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-unknown-ff-legacy", + "row": [ + "", + "0xff", + "NONE", + "ERR" + ] + }, + { + "id": "exec-unknown-ff-v0", + "row": [ + [ + "ff", + 0.0 + ], + "", + "0x0020a8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb89", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-unknown-ff-tapscript", + "row": [ + [ + "#SCRIPT# 0xff", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "unexec-unknown-ff-legacy", + "row": [ + "", + "0x0063ff6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-unknown-ff-v0", + "row": [ + [ + "0063ff6851", + 0.0 + ], + "", + "0x0020600ddaeceeba3db0d3bc12a42d0c453aacc06a831feeb8af875f12eb0b9bc23a", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-unknown-ff-tapscript", + "row": [ + [ + "#SCRIPT# 0x0063ff6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "success-inside-push-tapscript", + "row": [ + [ + "#SCRIPT# 0x017e6a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "initial-1000-tapscript", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0x757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "initial-1001-tapscript", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0x75757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "initial-520-tapscript", + "row": [ + [ + "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202", + "#SCRIPT# 0x7551", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "initial-521-tapscript", + "row": [ + [ + "0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202", + "#SCRIPT# 0x7551", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "initial-520-v0", + "row": [ + [ + "02020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202", + "7551", + 0.0 + ], + "", + "0x002033198a9bfef674ebddb9ffaa52928017b8472791e54c609cb95f278ac6b1e349", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "initial-521-v0", + "row": [ + [ + "0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202", + "7551", + 0.0 + ], + "", + "0x002033198a9bfef674ebddb9ffaa52928017b8472791e54c609cb95f278ac6b1e349", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "success-skip-1001", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0x7e", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "success-unexec-1001", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0x00637e6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "success-unparseable-tail", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0x7e4c", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "success187-skip-1001", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "#SCRIPT# 0xbb", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "success-skip-521", + "row": [ + [ + "0202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202", + "#SCRIPT# 0x7e", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "num-max-roundtrip-legacy", + "row": [ + "", + "0x04ffffff7f009304ffffff7f9c", + "NONE", + "OK" + ] + }, + { + "id": "num-max-roundtrip-v0", + "row": [ + [ + "04ffffff7f009304ffffff7f9c", + 0.0 + ], + "", + "0x0020f36eeff3c84cd539913d459c121b6bd819b9c685ee74f917cbb90604115292d6", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "num-max-roundtrip-tapscript", + "row": [ + [ + "#SCRIPT# 0x04ffffff7f009304ffffff7f9c", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "num-5byte-arith-legacy", + "row": [ + "", + "0x0501000000005193", + "NONE", + "ERR" + ] + }, + { + "id": "num-5byte-arith-v0", + "row": [ + [ + "0501000000005193", + 0.0 + ], + "", + "0x0020b848ed18f7f29997c3d53a95e2feef843e4377d6f68ff3063048ecda5bacdcbe", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "num-5byte-arith-tapscript", + "row": [ + [ + "#SCRIPT# 0x0501000000005193", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "add-result-may-be-wide-legacy", + "row": [ + "", + "0x04ffffff7f5193", + "NONE", + "OK" + ] + }, + { + "id": "add-result-may-be-wide-v0", + "row": [ + [ + "04ffffff7f5193", + 0.0 + ], + "", + "0x0020eb566edbbe7488b6e24071232356ae5fb75e4cd9e06f15aefe7e75260d482636", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "add-result-may-be-wide-tapscript", + "row": [ + [ + "#SCRIPT# 0x04ffffff7f5193", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "add-wide-result-not-reused-legacy", + "row": [ + "", + "0x04ffffff7f51930093", + "NONE", + "ERR" + ] + }, + { + "id": "add-wide-result-not-reused-v0", + "row": [ + [ + "04ffffff7f51930093", + 0.0 + ], + "", + "0x00205da300a12b9f082a4aed5382e52a1dc284e5e70f03e4f2f94fb2ae110b11c909", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "add-wide-result-not-reused-tapscript", + "row": [ + [ + "#SCRIPT# 0x04ffffff7f51930093", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "add-two-max-legacy", + "row": [ + "", + "0x04ffffff7f04ffffff7f93", + "NONE", + "OK" + ] + }, + { + "id": "add-two-max-v0", + "row": [ + [ + "04ffffff7f04ffffff7f93", + 0.0 + ], + "", + "0x002046e0ad53bffd35244b4f78fc636ea98247a9cc4d0fb18db8c9ca31f2034f940d", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "add-two-max-tapscript", + "row": [ + [ + "#SCRIPT# 0x04ffffff7f04ffffff7f93", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sub-underflow-wide-legacy", + "row": [ + "", + "0x0004ffffff7f94", + "NONE", + "OK" + ] + }, + { + "id": "sub-underflow-wide-v0", + "row": [ + [ + "0004ffffff7f94", + 0.0 + ], + "", + "0x0020de395c1340ee9f7c727f8647602560deec4c8c6051aa0e03110a59c83c36e933", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "sub-underflow-wide-tapscript", + "row": [ + [ + "#SCRIPT# 0x0004ffffff7f94", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "negate-negzero-legacy", + "row": [ + "", + "0x04000000808f009c", + "NONE", + "OK" + ] + }, + { + "id": "negate-negzero-v0", + "row": [ + [ + "04000000808f009c", + 0.0 + ], + "", + "0x002069f299d1070ae52101ba7e8f14553e9c55a0038440717839e3a159f1d890cac8", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "negate-negzero-tapscript", + "row": [ + [ + "#SCRIPT# 0x04000000808f009c", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "negate-i32-min-5byte-legacy", + "row": [ + "", + "0x0500000080808f", + "NONE", + "ERR" + ] + }, + { + "id": "negate-i32-min-5byte-v0", + "row": [ + [ + "0500000080808f", + 0.0 + ], + "", + "0x0020088e143671148f974c9d87d93f6caf952edb58b1468c40d98702ad0f78546b95", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "negate-i32-min-5byte-tapscript", + "row": [ + [ + "#SCRIPT# 0x0500000080808f", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "zero-negzero-numequal-legacy", + "row": [ + "", + "0x0001809c", + "NONE", + "OK" + ] + }, + { + "id": "zero-negzero-numequal-v0", + "row": [ + [ + "0001809c", + 0.0 + ], + "", + "0x002059a58326f03632f470edc13e65ac88ba36fd0597c0fb21017b09d2bdabc8b848", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "zero-negzero-numequal-tapscript", + "row": [ + [ + "#SCRIPT# 0x0001809c", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "zero-negzero-equal-legacy", + "row": [ + "", + "0x00018087", + "NONE", + "ERR" + ] + }, + { + "id": "zero-negzero-equal-v0", + "row": [ + [ + "00018087", + 0.0 + ], + "", + "0x002061448309f75f9cd3c0b28e3832c381f2cd381c2ece03d33e1f51a05b92f7dbe4", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "zero-negzero-equal-tapscript", + "row": [ + [ + "#SCRIPT# 0x00018087", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "within-inside-legacy", + "row": [ + "", + "0x510052a5", + "NONE", + "OK" + ] + }, + { + "id": "within-inside-v0", + "row": [ + [ + "510052a5", + 0.0 + ], + "", + "0x0020ad7b54286e1f00dcdb6d0070c21328e628e6ab5dc256de5b8ec3a1b03c35ee6f", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "within-inside-tapscript", + "row": [ + [ + "#SCRIPT# 0x510052a5", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "within-low-legacy", + "row": [ + "", + "0x000052a5", + "NONE", + "OK" + ] + }, + { + "id": "within-low-v0", + "row": [ + [ + "000052a5", + 0.0 + ], + "", + "0x002054d2e7408cc5d69f532f4e712be6040af48f9e284cccfd7b14dc554e545c94cc", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "within-low-tapscript", + "row": [ + [ + "#SCRIPT# 0x000052a5", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "within-high-legacy", + "row": [ + "", + "0x520052a5", + "NONE", + "ERR" + ] + }, + { + "id": "within-high-v0", + "row": [ + [ + "520052a5", + 0.0 + ], + "", + "0x0020a2fd7d2d67433e055845421b805c09d6729b504de68f54a38257eee66f1b94ce", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "within-high-tapscript", + "row": [ + [ + "#SCRIPT# 0x520052a5", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "pick-zero-legacy", + "row": [ + "", + "0x51007975", + "NONE", + "OK" + ] + }, + { + "id": "pick-zero-v0", + "row": [ + [ + "51007975", + 0.0 + ], + "", + "0x0020e1e0aed811c3ebd42ba1036be5751fd2957a3bdbe1f1991267dc994164bd85da", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "pick-zero-tapscript", + "row": [ + [ + "#SCRIPT# 0x51007975", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "pick-negative-legacy", + "row": [ + "", + "0x514f79", + "NONE", + "ERR" + ] + }, + { + "id": "pick-negative-v0", + "row": [ + [ + "514f79", + 0.0 + ], + "", + "0x0020f845c3104e1332bc8d28501aa5eda5f93d8b1c4d5ac0fab5283aa2136d52eb9b", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "pick-negative-tapscript", + "row": [ + [ + "#SCRIPT# 0x514f79", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "pick-depth-legacy", + "row": [ + "", + "0x515179", + "NONE", + "ERR" + ] + }, + { + "id": "pick-depth-v0", + "row": [ + [ + "515179", + 0.0 + ], + "", + "0x0020e288d1b232a6ecd2a9ff1af9e3f8fda051543e9d3c972b4dba49d9e79e07c5ce", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "pick-depth-tapscript", + "row": [ + [ + "#SCRIPT# 0x515179", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "roll-zero-legacy", + "row": [ + "", + "0x51007a", + "NONE", + "OK" + ] + }, + { + "id": "roll-zero-v0", + "row": [ + [ + "51007a", + 0.0 + ], + "", + "0x0020e83c265afd4c5661bce837e472b204589d6ba1f7a0f3c867c15eb970f35c04ad", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "roll-zero-tapscript", + "row": [ + [ + "#SCRIPT# 0x51007a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "roll-negative-legacy", + "row": [ + "", + "0x514f7a", + "NONE", + "ERR" + ] + }, + { + "id": "roll-negative-v0", + "row": [ + [ + "514f7a", + 0.0 + ], + "", + "0x00205c703b539b59b18687356025f58cb5622472b4d97fa191846f7ff5945207f2db", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "roll-negative-tapscript", + "row": [ + [ + "#SCRIPT# 0x514f7a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "roll-depth-legacy", + "row": [ + "", + "0x51517a", + "NONE", + "ERR" + ] + }, + { + "id": "roll-depth-v0", + "row": [ + [ + "51517a", + 0.0 + ], + "", + "0x002097539582bfe6cda9a019fc7f592957e574d572d502acaacb12e480564f29bad4", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "roll-depth-tapscript", + "row": [ + [ + "#SCRIPT# 0x51517a", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "if-minimal-true-legacy", + "row": [ + "", + "0x51635168", + "NONE", + "OK" + ] + }, + { + "id": "if-minimal-true-v0", + "row": [ + [ + "51635168", + 0.0 + ], + "", + "0x0020d7b825146d3d522e489fa9eea62fe3158d776e7fa72f49cf7fd95710cb9fc82f", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "if-minimal-true-tapscript", + "row": [ + [ + "#SCRIPT# 0x51635168", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "if-minimal-empty-legacy", + "row": [ + "", + "0x006300675168", + "NONE", + "OK" + ] + }, + { + "id": "if-minimal-empty-v0", + "row": [ + [ + "006300675168", + 0.0 + ], + "", + "0x0020171421719cc1ebfab76857f1f37bb78c233a96edab2a8b29f2f29e861429a31a", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "if-minimal-empty-tapscript", + "row": [ + [ + "#SCRIPT# 0x006300675168", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "minimalif-00-legacy", + "row": [ + "", + "0x010063516851", + "MINIMALIF", + "OK" + ] + }, + { + "id": "minimalif-00-v0-off", + "row": [ + [ + "010063516851", + 0.0 + ], + "", + "0x00205788e80c07f4bf3a9c5558051311ea48c24312c7ba5aff1bfb8c5850cfe0b1b3", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "minimalif-00-v0-on", + "row": [ + [ + "010063516851", + 0.0 + ], + "", + "0x00205788e80c07f4bf3a9c5558051311ea48c24312c7ba5aff1bfb8c5850cfe0b1b3", + "P2SH,WITNESS,MINIMALIF", + "ERR" + ] + }, + { + "id": "minimalif-00-tapscript", + "row": [ + [ + "#SCRIPT# 0x010063516851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "minimalif-negzero-tapscript", + "row": [ + [ + "#SCRIPT# 0x018063516851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "minimalif-negzero-v0-off", + "row": [ + [ + "018063516851", + 0.0 + ], + "", + "0x0020f61b664d9fc625e048ed2c0b6a8e1290f1d46462542c6cc8bd125d2b4722da21", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "minimalif-02-legacy", + "row": [ + "", + "0x52635168", + "MINIMALIF", + "OK" + ] + }, + { + "id": "minimalif-02-tapscript", + "row": [ + [ + "#SCRIPT# 0x52635168", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "bool-leading-zero-legacy", + "row": [ + "", + "0x020001635168", + "NONE", + "OK" + ] + }, + { + "id": "bool-leading-zero-v0", + "row": [ + [ + "020001635168", + 0.0 + ], + "", + "0x0020eb5b2d9f5196dd8ed770d207c18376abae1aa806b7c9b29437e987a4d56e2832", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "bool-leading-zero-tapscript", + "row": [ + [ + "#SCRIPT# 0x020001635168", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "bool-negzero-legacy", + "row": [ + "", + "0x01806300675168", + "NONE", + "OK" + ] + }, + { + "id": "bool-negzero-v0", + "row": [ + [ + "01806300675168", + 0.0 + ], + "", + "0x00202039179af7f617660023e2227b19b7626a06b7ee3438306fb18a54c7a58535e4", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-does-not-push-legacy", + "row": [ + "", + "0x006352675168", + "NONE", + "OK" + ] + }, + { + "id": "unexec-does-not-push-v0", + "row": [ + [ + "006352675168", + 0.0 + ], + "", + "0x0020f27d633d8174c84c5a8f14c98e688e06b4990f017aed42d2b681af29755c3627", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-does-not-push-tapscript", + "row": [ + [ + "#SCRIPT# 0x006352675168", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "minimaldata-unexec-legacy", + "row": [ + "", + "0x006301016851", + "MINIMALDATA", + "OK" + ] + }, + { + "id": "minimaldata-exec-legacy", + "row": [ + "", + "0x0101", + "MINIMALDATA", + "ERR" + ] + }, + { + "id": "minimaldata-unexec-v0", + "row": [ + [ + "006301016851", + 0.0 + ], + "", + "0x0020544fcd0cd9123b0eab0e4ad22dcf783e010945af307ac2034dc0fa5890bb7432", + "P2SH,WITNESS,MINIMALDATA", + "OK" + ] + }, + { + "id": "minimaldata-exec-v0", + "row": [ + [ + "0101", + 0.0 + ], + "", + "0x00209dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2", + "P2SH,WITNESS,MINIMALDATA", + "ERR" + ] + }, + { + "id": "unexec-checksigverify-legacy", + "row": [ + "", + "0x00630000ad6851", + "NONE", + "OK" + ] + }, + { + "id": "unexec-checksigverify-v0", + "row": [ + [ + "00630000ad6851", + 0.0 + ], + "", + "0x0020a48b3c2e59851f3fbc3c3ad1a96d42def150b49180680fd0671f542a78288043", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "unexec-checksigverify-tapscript", + "row": [ + [ + "#SCRIPT# 0x00630000ad6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "exec-checksigverify-empty-legacy", + "row": [ + "", + "0x51630000ad6851", + "NONE", + "ERR" + ] + }, + { + "id": "exec-checksigverify-empty-v0", + "row": [ + [ + "51630000ad6851", + 0.0 + ], + "", + "0x00208c8d851279e92464452acf309f20cdef4795723b1cbf892ef5a006e6ea813584", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "exec-checksigverify-empty-tapscript", + "row": [ + [ + "#SCRIPT# 0x51630000ad6851", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "stack-underflow-drop", + "row": [ + "", + "DROP", + "NONE", + "ERR" + ] + }, + { + "id": "stack-2rot-6", + "row": [ + "", + "1 2 3 4 5 6 2ROT", + "NONE", + "OK" + ] + }, + { + "id": "stack-2rot-5", + "row": [ + "", + "1 2 3 4 5 2ROT", + "NONE", + "ERR" + ] + }, + { + "id": "stack-fromalt-ok", + "row": [ + "", + "1 TOALTSTACK FROMALTSTACK", + "NONE", + "OK" + ] + }, + { + "id": "stack-fromalt-empty", + "row": [ + "", + "FROMALTSTACK", + "NONE", + "ERR" + ] + }, + { + "id": "hash-sha1-empty", + "row": [ + "", + "0x00a714da39a3ee5e6b4b0d3255bfef95601890afd8070987", + "NONE", + "OK" + ] + }, + { + "id": "hash-sha1-abc", + "row": [ + "", + "0x03616263a714a9993e364706816aba3e25717850c26c9cd0d89d87", + "NONE", + "OK" + ] + }, + { + "id": "hash-sha256-empty", + "row": [ + "", + "0x00a820e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85587", + "NONE", + "OK" + ] + }, + { + "id": "hash-sha256-abc", + "row": [ + "", + "0x03616263a820ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad87", + "NONE", + "OK" + ] + }, + { + "id": "hash-ripemd160-empty", + "row": [ + "", + "0x00a6149c1185a5c5e9fc54612808977ee8f548b2258d3187", + "NONE", + "OK" + ] + }, + { + "id": "hash-ripemd160-abc", + "row": [ + "", + "0x03616263a6148eb208f7e05d987a9b044a8e98c6b087f15a0bfc87", + "NONE", + "OK" + ] + }, + { + "id": "hash-hash160-empty", + "row": [ + "", + "0x00a914b472a266d0bd89c13706a4132ccfb16f7c3b9fcb87", + "NONE", + "OK" + ] + }, + { + "id": "hash-hash160-abc", + "row": [ + "", + "0x03616263a914bb1be98c142444d7a56aa3981c3942a978e4dc3387", + "NONE", + "OK" + ] + }, + { + "id": "hash-hash256-empty", + "row": [ + "", + "0x00aa205df6e0e2761359d30a8275058e299fcc0381534545f55cf43e41983f5d4c945687", + "NONE", + "OK" + ] + }, + { + "id": "hash-hash256-abc", + "row": [ + "", + "0x03616263aa204f8b42c22dd3729b519ba6f68d2da7cc5b2d606d05daed5ad5128cc03e6c635887", + "NONE", + "OK" + ] + }, + { + "id": "hash-sha256-abc-mismatch", + "row": [ + "", + "0x03616263a820000000000000000000000000000000000000000000000000000000000000000087", + "NONE", + "ERR" + ] + }, + { + "id": "sighash-all-legacy", + "row": [ + "0x483045022100a4c9043fad4feeb63c1af1c6bb42a0d695871a2a3ef41c543535a6f994588fd7022048c71f3f575a236a3c297ba457fdca010b158e2f18ff69d2f315580b6b5e062701", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-all-v0", + "row": [ + [ + "3045022100b94b8a40271a5dd9c14a39f2135bced005bb5a29ab9146c182b295d6f4fb921502203c3388fee23804f59d31bbece74b0da1ee545bc9210c2fda12c147b56749843001", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-none-legacy", + "row": [ + "0x47304402205563d7222beeaf4f10f6d37c0d4af9c5b92e6d93cadf7d6107192a7f16fadc54022032692bab38475b52df23c27bb92ebd73a1e530607cb3eaef4d0eca3f1a90754602", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-none-v0", + "row": [ + [ + "304402206af703f2212a34e1c9df7eef2658f0f2ff3211ebd6f4f866563adb011227222e0220012cd9d133c6cdb687444a1543198aa2166a6f2503df81eb62d35a90dd78bad702", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-single-legacy", + "row": [ + "0x483045022100dec2a58bd2d8d41ee24e211c7320129612d2a81ff558e8825ab6f56bdd2ce5ec02202b61812cbc9267f2f066e3017bc0a2ca96d2b8ffe0c138cf8d0aa2ea8be0616803", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-single-v0", + "row": [ + [ + "3045022100ee2cfc45eda9b38010bd40729fe11efe62baf62794d63a2269186da22998150b022050b171a7bd0e8ff0a6b0b53b12644451376a758539abac7423762dbc2713385603", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-all-acp-legacy", + "row": [ + "0x4730440220597c61f8215ce04d08b62d928167d9e43ed80d8e6fa2b264943e1611c4647ab6022043a31d916c660cbec2656c4c5c5624a840aeb86797ec3bfa1df8051f81c3541181", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-all-acp-v0", + "row": [ + [ + "304402201a022123842b2046fe6a573be4d7c236b93822e4b510869b296e3fd2b468e52502206366a57b25b4082e3ff164ca7bbfdf2e150439e53204f3b3bc5fd0fd05e0910181", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-none-acp-legacy", + "row": [ + "0x483045022100a52dc21adce074529ee497df452d6cf97bb6fb4cdc6218bfd76ebbf19956094e022071180a23d362e0cb61fa4557f4a339e9631d9baf3019d8b92992b06d7ebe620f82", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-none-acp-v0", + "row": [ + [ + "3044022006c998f642a8c5f4daeb8cee7a3169905c25f7326bd2753e699a452c9eb502b5022034f479e34282fd113db287c948cb85e36c3c7edf19a870e803ecfbc5679380ff82", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-single-acp-legacy", + "row": [ + "0x483045022100d4368631500e686b0f64bd9dacd10bae3d1e99aac13c6ca82b06fe091de6bb7102201f99d7c42ba13800721613971adbcb82a8ca4b6442b50d58e11a7f57f2da90ff83", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-single-acp-v0", + "row": [ + [ + "304402200823b02502490edaa21bdd17ba8d97ba859abb8b85c18c27cae74cac81a67c2402201567631429564f7d5c84ebf9c52d245f65ee48ea68a43ff8a6035eac69faae1083", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-wrongtype-legacy", + "row": [ + "0x483045022100a4c9043fad4feeb63c1af1c6bb42a0d695871a2a3ef41c543535a6f994588fd7022048c71f3f575a236a3c297ba457fdca010b158e2f18ff69d2f315580b6b5e062702", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "ERR" + ] + }, + { + "id": "sighash-wrongtype-v0", + "row": [ + [ + "3045022100b94b8a40271a5dd9c14a39f2135bced005bb5a29ab9146c182b295d6f4fb921502203c3388fee23804f59d31bbece74b0da1ee545bc9210c2fda12c147b56749843002", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "sighash-single-past-legacy", + "row": [ + "0x47304402201a6f5d07091b7778efa299387629ca397667d8f258aa9063e0091e02825d942502200171bd796de6c4b7596ecd31b449bb54d30f6f9877c714d0ede3b193ee3e3c0c03", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ], + "spend": { + "n_outputs": 0 + } + }, + { + "id": "sighash-single-past-v0", + "row": [ + [ + "304402202bbb6d42931e3dfb545c73e0a163c1b76cc24d53c298e86477a5de0d36ae188d0220161bec69b666aadf4e13f669a39a730df54a9ccc60553aa8b06ad5e462ee049303", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ], + "spend": { + "n_outputs": 0 + } + }, + { + "id": "sighash-type04-dersig-legacy", + "row": [ + "0x48304502210080b22335992ee5922a856d58ded71bff4b2f3bdfd211b0e660027c1465a6d7b702203b02af6441aac6aa0fbcfdec12cd8b5d13184302226ff6229f3550c81ececdf604", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "sighash-type04-strictenc-legacy", + "row": [ + "0x48304502210080b22335992ee5922a856d58ded71bff4b2f3bdfd211b0e660027c1465a6d7b702203b02af6441aac6aa0fbcfdec12cd8b5d13184302226ff6229f3550c81ececdf604", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "STRICTENC", + "ERR" + ] + }, + { + "id": "sighash-type04-dersig-v0", + "row": [ + [ + "3044022064e70fe04ad4f8a026da9bcbe316a2c55988b80ca9864cc5fe501d06c261c218022030c61cdef708a95280b00fba2765e8744fe3c1ea0410db7e2de310cf5c0920bd04", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "sighash-type04-strictenc-v0", + "row": [ + [ + "3044022064e70fe04ad4f8a026da9bcbe316a2c55988b80ca9864cc5fe501d06c261c218022030c61cdef708a95280b00fba2765e8744fe3c1ea0410db7e2de310cf5c0920bd04", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,STRICTENC", + "ERR" + ] + }, + { + "id": "dersig-off-nondet-legacy", + "row": [ + "0x493046022100a4c9043fad4feeb63c1af1c6bb42a0d695871a2a3ef41c543535a6f994588fd702210048c71f3f575a236a3c297ba457fdca010b158e2f18ff69d2f315580b6b5e062701", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "NONE", + "OK" + ] + }, + { + "id": "dersig-on-nondet-legacy", + "row": [ + "0x493046022100a4c9043fad4feeb63c1af1c6bb42a0d695871a2a3ef41c543535a6f994588fd702210048c71f3f575a236a3c297ba457fdca010b158e2f18ff69d2f315580b6b5e062701", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "ERR" + ] + }, + { + "id": "dersig-off-nondet-v0", + "row": [ + [ + "3046022100b94b8a40271a5dd9c14a39f2135bced005bb5a29ab9146c182b295d6f4fb92150221003c3388fee23804f59d31bbece74b0da1ee545bc9210c2fda12c147b56749843001", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "dersig-on-nondet-v0", + "row": [ + [ + "3046022100b94b8a40271a5dd9c14a39f2135bced005bb5a29ab9146c182b295d6f4fb92150221003c3388fee23804f59d31bbece74b0da1ee545bc9210c2fda12c147b56749843001", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "checksig-empty-continues-legacy", + "row": [ + "", + "0x0021034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + "DERSIG", + "OK" + ] + }, + { + "id": "checksig-empty-continues-v0", + "row": [ + [ + "0021034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + 0.0 + ], + "", + "0x00201b82a9aa7ab7c06e82c0fb57c98209177075f8cffa7807b1cb4e177a5d53c99a", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "checksig-badenc-dersig-off-legacy", + "row": [ + "", + "0x01ff21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + "NONE", + "OK" + ] + }, + { + "id": "checksig-badenc-dersig-on-legacy", + "row": [ + "", + "0x01ff21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + "DERSIG", + "ERR" + ] + }, + { + "id": "checksig-badenc-dersig-off-v0", + "row": [ + [ + "01ff21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + 0.0 + ], + "", + "0x002061f7eb05ccc0ae28f20a9e9f967ffccd77718ffa923d9b3fc36b4ed474eee35f", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "checksig-badenc-dersig-on-v0", + "row": [ + [ + "01ff21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + 0.0 + ], + "", + "0x002061f7eb05ccc0ae28f20a9e9f967ffccd77718ffa923d9b3fc36b4ed474eee35f", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "ecdsa-legacy-sig-on-v0", + "row": [ + [ + "3045022100a4c9043fad4feeb63c1af1c6bb42a0d695871a2a3ef41c543535a6f994588fd7022048c71f3f575a236a3c297ba457fdca010b158e2f18ff69d2f315580b6b5e062701", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00208f30ec1925eaa1916f4d67a9742d938c247d220c796bef6550111eaa90327245", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "ecdsa-v0-sig-on-legacy", + "row": [ + "0x483045022100b94b8a40271a5dd9c14a39f2135bced005bb5a29ab9146c182b295d6f4fb921502203c3388fee23804f59d31bbece74b0da1ee545bc9210c2fda12c147b56749843001", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "ERR" + ] + }, + { + "id": "fad-empty-keeps-fail-legacy", + "row": [ + "0x000001ff47304402207dbf75ce606bfa057e28fc0df270d1d611265e7289478006ca7fc1367862f85a02206869a7fa9e0762274a826c22e5166a264d5c4a275d3b20a40826f875ea8a8eff01", + "0x007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + "DERSIG", + "OK" + ] + }, + { + "id": "fad-empty-deleted-match-legacy", + "row": [ + "0x000001ff483045022100a1e480c9e59dfbec0fc1e196cc346a156f41f5d9dd37daa5ec152c1066f1cc8c022038990160e0450a71e0937e171bbb82d9ce1d98f4bd502815f58d4a7df5d5f73c01", + "0x007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + "DERSIG", + "ERR" + ] + }, + { + "id": "fad-v0-keeps-op0-match", + "row": [ + [ + "", + "", + "ff", + "3045022100ca65bfcd0ed7ac854a19a8e1dfd71ba047c049d49afa54738df8492a9b23ad5c022007ed64cb7e0309a7d114cf54fd9a23c9e62d9a470388adaafce2012773c2291b01", + "007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + 0.0 + ], + "", + "0x00200a7dc0655fc07310facf36f32ea28c75032243690102125185a997a7622005db", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "fad-v0-keeps-op0-miss", + "row": [ + [ + "", + "", + "ff", + "3044022058066dc35aad6f6bc52246b6fdd161e876f6d08c0ffc71828cd395df52a7e02b02206701e42696b5ccefad29cf7a6df3e2cccb6eda2f8667628fe70b6932597a5e8001", + "007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + 0.0 + ], + "", + "0x00200a7dc0655fc07310facf36f32ea28c75032243690102125185a997a7622005db", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "fad-offboundary-not-removed-legacy", + "row": [ + "0x000001ff473044022017bd49375fe55ae02d680227b3d549b514e1f3f010342e91f33a98415931322a022057f3a8ca004763703d6ddfe3252249a23cbd27a393f9dbf54a5eb887accdc94f01", + "0x01007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + "DERSIG", + "ERR" + ] + }, + { + "id": "fad-offboundary-as-if-deleted-legacy", + "row": [ + "0x000001ff483045022100c51e0f38d403f51796a1c0b99852d6ba1e87af01766b350fa7c8fd9f6f9a09ee02200cd007cba21e1e2051e8a89150c08a145c4cb11f91f3e426d47e2e557258e68401", + "0x01007553210202020202020202020202020202020202020202020202020202020202020202022103030303030303030303030303030303030303030303030303030303030303030321034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa53ae91", + "DERSIG", + "OK" + ] + }, + { + "id": "codesep-suffix-legacy", + "row": [ + "0x483045022100bb2e7a40481c5c2f4388451d02cb29be38873e477ebd4305d28f1d5669209f3e02203898b854a7fdffc26de0be31e5d36d87e1c0e9742aebfc4d7d5614e3cd0535f101", + "0x61ab21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "OK" + ] + }, + { + "id": "codesep-prefix-legacy", + "row": [ + "0x473044022023fc2d5b44b8e82f7f363a94eab6486de50f8dcb1003bc7f24bf3c2d9923fa5f02204e7ae624383de29f982b9d2bf909184909dc49015c617c8138b9aa6cc21a440701", + "0x61ab21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "DERSIG", + "ERR" + ] + }, + { + "id": "codesep-suffix-v0", + "row": [ + [ + "3045022100bc1a731690720e0614eafbc890fc685a6e2afad1706bf8bbf2befdac74ae851702200a79405cd65ceeef1b5f99eba857d90c96140c41e586d1dd017c20a31d00220801", + "61ab21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00209284c1d13a3459e02897f21d6625289f9284d1d6930e09ebe977e1068fe02465", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "codesep-prefix-v0", + "row": [ + [ + "3045022100d513d769ba95347d9dc814b8f09265e85f966b914eb31841dfd82b52480141e40220390dce511b2166f24c23f476337576f7b4502fd135b099367959a37a1d310cbc01", + "61ab21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + 0.0 + ], + "", + "0x00209284c1d13a3459e02897f21d6625289f9284d1d6930e09ebe977e1068fe02465", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "sighash-default-tap", + "row": [ + [ + "35899fb8823e83097ba0b82ff43027bba716528e86b67209f6f2575c2bbe764c82efc881dda0a21a501e62124f7d9ed563743419f7b46f7163abdc21b07cab22", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-all-tap", + "row": [ + [ + "e17cb3e97b2d1c66911c239a5e2072987328d425556504137355476719d2c5e6acf7b02c024e91a3ea599f2239853c4c3bbfca305910629ab7251c0a7b65921a01", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-none-tap", + "row": [ + [ + "373a4bc9bbb0d8ab65f05ed1e4db0479237353de6993c9979988e8f184086c4730ea0ce63df8be3252fc9f8772d7bd52f575068d20ca733c6a599ea92a051c2302", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-single-tap", + "row": [ + [ + "32262e920c322b44484a2fd249cfb60f13ee141f1c48ef921e3d3fc389ed997f87e7788816fcb6f9b500dad9313f26a4300ed34bef8871de4e87fff98b1f547a03", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-all-acp-tap", + "row": [ + [ + "c7e8ddd73aafe7d8c32d72661b2becd35bc619885e54932b115de3fa1d062305f84bc382cd16d378938787be4561473d3db462f763eb5beb411fe11e0ab18efd81", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-none-acp-tap", + "row": [ + [ + "6e589c5a6fcd320d1605bd51cf1dd39704a749332cf2affb82a66ae3d69f6eb457ead85dbb148f4e85cb8c3d0c5d6352e16813992e44a0c6bda0dff9a5480b6082", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-single-acp-tap", + "row": [ + [ + "badfebe530839fbac527e4755e2aaace8e27b240eb3be980764168d12e9735621dee86c1b56cded0f71aa1859ab8ca6157de2a734ecf571ffa214e9f776894d583", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "sighash-wrongtype-tap", + "row": [ + [ + "e17cb3e97b2d1c66911c239a5e2072987328d425556504137355476719d2c5e6acf7b02c024e91a3ea599f2239853c4c3bbfca305910629ab7251c0a7b65921a02", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "sighash-type00-tap", + "row": [ + [ + "e17cb3e97b2d1c66911c239a5e2072987328d425556504137355476719d2c5e6acf7b02c024e91a3ea599f2239853c4c3bbfca305910629ab7251c0a7b65921a00", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "sighash-type04-tap", + "row": [ + [ + "e17cb3e97b2d1c66911c239a5e2072987328d425556504137355476719d2c5e6acf7b02c024e91a3ea599f2239853c4c3bbfca305910629ab7251c0a7b65921a04", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "sighash-single-past-tap", + "row": [ + [ + "4aaa0b864d734f5fe301a47000368f3083ec4adda31890a9007c0a9ab9c0bf536693030f7f98d2f141f3cd96a62b0aa5066474f109889570a497456ea82a24da03", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ], + "spend": { + "n_outputs": 0 + } + }, + { + "id": "checksig-empty-continues-tap", + "row": [ + [ + "#SCRIPT# 0x00204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac91", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "checksig-invalid-tap", + "row": [ + [ + "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "checksig-empty-pubkey-tap", + "row": [ + [ + "#SCRIPT# 0x0000ac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "checksig-unknown-pubkey-tap", + "row": [ + [ + "#SCRIPT# 0x011101aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "checksigadd-valid-tap", + "row": [ + [ + "af022bace9628fe6d03378dd1c29ffd7fe00c8d50332ffc56d046932243c6d02e3324dc014382056694ac217ec2be78231e4eb8ac34fe4adc3713c4479be90b8", + "", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "checksigadd-empty-tap", + "row": [ + [ + "", + "01", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "checksigadd-invalid-tap", + "row": [ + [ + "22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222", + "", + "#SCRIPT# 0x204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "tap-weight-pass", + "row": [ + [ + "#SCRIPT# 0x01115101aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "tap-weight-fail", + "row": [ + [ + "#SCRIPT# 0x01115101aaba7501115101aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "tap-weight-empty-free", + "row": [ + [ + "#SCRIPT# 0x005101aaba75005101aaba", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "codesep-pos0-tap", + "row": [ + [ + "1b1a620bfdb73169ee77f065242fbaabd6a56c95aee1637c91eeaa033c132736e245963160c870ecbc33130c3ef6d1e341ea228ecaac963f80b7b178968b1d04", + "#SCRIPT# 0xab204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "codesep-ignored-tap", + "row": [ + [ + "aabf58d6b7ea6a470f7be403a031bef6e59584d898e69bdee3f7ac3eeb069695b41d32856cbd8909c96733ed0233ad534ae31975289444853584250657df7fd7", + "#SCRIPT# 0xab204f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aaac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "multisig-m0-n0-legacy", + "row": [ + "", + "0 0 0 CHECKMULTISIG", + "DERSIG", + "OK" + ] + }, + { + "id": "multisig-m0-n0-v0", + "row": [ + [ + "#SCRIPT# 0 0 0 CHECKMULTISIG", + 0.0 + ], + "", + "0x00208886efbf5fce0db2d6ee49d59faab9c74bf6be426c925b6262e81627b8591cec", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "multisig-n21-legacy", + "row": [ + "", + "0 0 21 CHECKMULTISIG", + "DERSIG", + "ERR" + ] + }, + { + "id": "multisig-n21-v0", + "row": [ + [ + "#SCRIPT# 0 0 21 CHECKMULTISIG", + 0.0 + ], + "", + "0x00204ff37ae77f6547526b3f9808249257468ee5db72922248682c7ef836afa05573", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "multisig-m-gt-n-legacy", + "row": [ + "", + "0x522102020202020202020202020202020202020202020202020202020202020202020251ae", + "DERSIG", + "ERR" + ] + }, + { + "id": "multisig-m-negative-legacy", + "row": [ + "", + "-1 0 CHECKMULTISIG", + "DERSIG", + "ERR" + ] + }, + { + "id": "multisig-m-negative-v0", + "row": [ + [ + "#SCRIPT# -1 0 CHECKMULTISIG", + 0.0 + ], + "", + "0x0020545def37ae36b23cad8dfe6b6da2c52fe379616e5c49ed4b0a09c7b1213209fd", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "multisig-m20-n20-legacy", + "row": [ + "0x00483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe76201483045022100f8890072827948fc9360a0ec431f9ba5b8d244915b251566b911502dc2910331022043a41e62d8a4d319f2349507bc090626fa44e7e5e23eff0492ca564e7fbfe762010114", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa0114ae", + "DERSIG", + "OK" + ] + }, + { + "id": "multisig-m20-n20-v0", + "row": [ + [ + "", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "304402207620e7af3a2c6c8da29d781678ffa506db8f2c5bfd2fa2f1c015d8766062542c02203ff07127b3559fd36ffb9987ac4e663052fc634bebb41d82ff41170329abfe7701", + "14", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa0114ae", + 0.0 + ], + "", + "0x0020573dd673dccac14349a13f0c5a05b97b63f0ac9c55a80d0e854bebf4e9f96e0a", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "multisig-unused-badenc-legacy", + "row": [ + "0x0001ff47304402203cd0e29a97e1c581ac731f58daf75777d962fe433ed7a69d83bb94a0eb0227ff02204f2e50f626ca85e58377990f6db1efcbcf218133889a4474164027be492859d3010102", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa2102020202020202020202020202020202020202020202020202020202020202020252ae91", + "DERSIG", + "OK" + ] + }, + { + "id": "multisig-tried-badenc-legacy", + "row": [ + "0x0047304402203cd0e29a97e1c581ac731f58daf75777d962fe433ed7a69d83bb94a0eb0227ff02204f2e50f626ca85e58377990f6db1efcbcf218133889a4474164027be492859d30101ff0102", + "0x21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa2102020202020202020202020202020202020202020202020202020202020202020252ae91", + "DERSIG", + "ERR" + ] + }, + { + "id": "multisig-unused-badenc-v0", + "row": [ + [ + "", + "ff", + "30450221008dc4fff25d02d0ce9adb4a887679ba15854645744e1b95b9dd0b828ea87c342b02203e9bc531ae61bfc9066cf0c05e84b0783369320b2fdefb9b71bd4f1352bbf41f01", + "02", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa2102020202020202020202020202020202020202020202020202020202020202020252ae91", + 0.0 + ], + "", + "0x002030a9b330a60daf7eecc53bffb405c26027aeb71c6aa54038ce20e21ab9e3104c", + "P2SH,WITNESS,DERSIG", + "OK" + ] + }, + { + "id": "multisig-tried-badenc-v0", + "row": [ + [ + "", + "30450221008dc4fff25d02d0ce9adb4a887679ba15854645744e1b95b9dd0b828ea87c342b02203e9bc531ae61bfc9066cf0c05e84b0783369320b2fdefb9b71bd4f1352bbf41f01", + "ff", + "02", + "21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa2102020202020202020202020202020202020202020202020202020202020202020252ae91", + 0.0 + ], + "", + "0x002030a9b330a60daf7eecc53bffb405c26027aeb71c6aa54038ce20e21ab9e3104c", + "P2SH,WITNESS,DERSIG", + "ERR" + ] + }, + { + "id": "nulldummy-off-legacy", + "row": [ + "", + "1 0 0 CHECKMULTISIG", + "NONE", + "OK" + ] + }, + { + "id": "nulldummy-on-legacy", + "row": [ + "", + "1 0 0 CHECKMULTISIG", + "NULLDUMMY", + "ERR" + ] + }, + { + "id": "nulldummy-off-v0", + "row": [ + [ + "#SCRIPT# 1 0 0 CHECKMULTISIG", + 0.0 + ], + "", + "0x0020dc7673a808d9f2047924be256cb0c8ac8fe10a03516c0ff59a41a9f6b3512cc6", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "nulldummy-on-v0", + "row": [ + [ + "#SCRIPT# 1 0 0 CHECKMULTISIG", + 0.0 + ], + "", + "0x0020dc7673a808d9f2047924be256cb0c8ac8fe10a03516c0ff59a41a9f6b3512cc6", + "P2SH,WITNESS,NULLDUMMY", + "ERR" + ] + }, + { + "id": "nulldummy-cms-tap", + "row": [ + [ + "#SCRIPT# 0x000000ae", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "nulldummy-cmsverify-tap", + "row": [ + [ + "#SCRIPT# 0x000000af", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "multisig-m-gt-n-v0", + "row": [ + [ + "52010251ae", + 0.0 + ], + "", + "0x00209f04847ce3cec7e8674fa24c3388b095ba3a718dc6b101d00142a6cfdf2505af", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "row": [ + "", + "1 OP_CLTV 1 EQUAL", + "NONE", + "OK" + ], + "id": "cltv-off-does-not-pop" + }, + { + "row": [ + "", + "1 OP_CSV 1 EQUAL", + "NONE", + "OK" + ], + "id": "csv-off-does-not-pop" + }, + { + "row": [ + "", + "-1 OP_CLTV OP_DROP 1", + "NONE", + "OK" + ], + "id": "cltv-off-negative-nop" + }, + { + "row": [ + "", + "-1 OP_CSV OP_DROP 1", + "NONE", + "OK" + ], + "id": "csv-off-negative-nop" + }, + { + "row": [ + "", + "-1 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "id": "cltv-negative" + }, + { + "row": [ + "", + "-1 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "id": "csv-negative" + }, + { + "row": [ + "", + "0x050100000000 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "OK" + ], + "spend": { + "locktime": 1, + "sequence": 0 + }, + "id": "cltv-5byte-ok" + }, + { + "row": [ + "", + "0x06010000000000 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 1, + "sequence": 0 + }, + "id": "cltv-6byte" + }, + { + "row": [ + "", + "0x050100000000 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 2, + "sequence": 1 + }, + "id": "csv-5byte-ok" + }, + { + "row": [ + "", + "0x06010000000000 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 2, + "sequence": 1 + }, + "id": "csv-6byte" + }, + { + "row": [ + "", + "500000000 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 0, + "sequence": 0 + }, + "id": "cltv-type-mismatch-time-vs-height" + }, + { + "row": [ + "", + "0 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 500000000, + "sequence": 0 + }, + "id": "cltv-type-mismatch-height-vs-time" + }, + { + "row": [ + "", + "100 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "OK" + ], + "spend": { + "locktime": 100, + "sequence": 0 + }, + "id": "cltv-equal-height" + }, + { + "row": [ + "", + "101 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 100, + "sequence": 0 + }, + "id": "cltv-greater-height" + }, + { + "row": [ + "", + "500000000 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "OK" + ], + "spend": { + "locktime": 500000000, + "sequence": 0 + }, + "id": "cltv-equal-time" + }, + { + "row": [ + "", + "500000001 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 500000000, + "sequence": 0 + }, + "id": "cltv-greater-time" + }, + { + "row": [ + "", + "0 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "ERR" + ], + "spend": { + "locktime": 0, + "sequence": 4294967295 + }, + "id": "cltv-final-sequence" + }, + { + "row": [ + "", + "0 OP_CLTV OP_DROP 1", + "CHECKLOCKTIMEVERIFY", + "OK" + ], + "spend": { + "locktime": 0, + "sequence": 0 + }, + "id": "cltv-sequence-not-final" + }, + { + "row": [ + "", + "2147483648 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 1, + "sequence": 0 + }, + "id": "csv-disable-bit-skips-version" + }, + { + "row": [ + "", + "1 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 1, + "sequence": 1 + }, + "id": "csv-version-below-2" + }, + { + "row": [ + "", + "1 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 4294967295, + "sequence": 1 + }, + "id": "csv-version-ffffffff" + }, + { + "row": [ + "", + "1 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 2, + "sequence": 1 + }, + "id": "csv-equal" + }, + { + "row": [ + "", + "2 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 2, + "sequence": 1 + }, + "id": "csv-one-less" + }, + { + "row": [ + "", + "4194304 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 2, + "sequence": 0 + }, + "id": "csv-type-mismatch" + }, + { + "row": [ + "", + "4194304 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 2, + "sequence": 4194304 + }, + "id": "csv-type-match" + }, + { + "row": [ + "", + "1 OP_CSV OP_DROP 1", + "CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 2, + "sequence": 2147483649 + }, + "id": "csv-input-disable" + }, + { + "row": [ + [ + "#SCRIPT# -1 OP_CLTV OP_DROP 1", + 0.0 + ], + "", + "0x0020a55085984de539799a1d52718964ddb5916308722bd27978a77595781672465e", + "P2SH,WITNESS,CHECKLOCKTIMEVERIFY", + "ERR" + ], + "id": "cltv-negative-v0" + }, + { + "row": [ + [ + "#SCRIPT# 100 OP_CLTV OP_DROP 1", + 0.0 + ], + "", + "0x0020ffc97e170f4e2333ba540c2653f78f5d7a690ca84820942ddcd198a4f7b0b26a", + "P2SH,WITNESS,CHECKLOCKTIMEVERIFY", + "OK" + ], + "spend": { + "locktime": 100, + "sequence": 0 + }, + "id": "cltv-equal-height-v0" + }, + { + "row": [ + [ + "#SCRIPT# 1 OP_CSV OP_DROP 1", + 0.0 + ], + "", + "0x0020987d3d170f7a0080d9c052f6f61e57d3fa08c153724b7e9b07475afa368e88f8", + "P2SH,WITNESS,CHECKSEQUENCEVERIFY", + "ERR" + ], + "spend": { + "version": 1, + "sequence": 1 + }, + "id": "csv-version-below-2-v0" + }, + { + "row": [ + [ + "#SCRIPT# 1 OP_CSV OP_DROP 1", + 0.0 + ], + "", + "0x0020987d3d170f7a0080d9c052f6f61e57d3fa08c153724b7e9b07475afa368e88f8", + "P2SH,WITNESS,CHECKSEQUENCEVERIFY", + "OK" + ], + "spend": { + "version": 4294967295, + "sequence": 1 + }, + "id": "csv-version-ffffffff-v0" + }, + { + "id": "p2sh-on-executes-true", + "row": [ + "0x0151", + "0xa914da1745e9b549bd0bfa1a569971c77eba30cd5a4b87", + "P2SH", + "OK" + ] + }, + { + "id": "p2sh-on-executes-false", + "row": [ + "0x0100", + "0xa9149f7fd096d37ed2c0e3f7f0cfc924beef4ffceb6887", + "P2SH", + "ERR" + ] + }, + { + "id": "p2sh-off-skips-false", + "row": [ + "0x0100", + "0xa9149f7fd096d37ed2c0e3f7f0cfc924beef4ffceb6887", + "NONE", + "OK" + ] + }, + { + "id": "p2sh-on-not-push-only", + "row": [ + "0x610100", + "0xa9149f7fd096d37ed2c0e3f7f0cfc924beef4ffceb6887", + "P2SH", + "ERR" + ] + }, + { + "id": "p2sh-off-not-push-only", + "row": [ + "0x610100", + "0xa9149f7fd096d37ed2c0e3f7f0cfc924beef4ffceb6887", + "NONE", + "OK" + ] + }, + { + "id": "wit-v0-20-empty", + "row": [ + [ + 0.0 + ], + "", + "0x00140202020202020202020202020202020202020202", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "wit-v0-21", + "row": [ + [ + 0.0 + ], + "", + "0x0015111111111111111111111111111111111111111111", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "wit-v0-32-true", + "row": [ + [ + "51", + 0.0 + ], + "", + "0x00204ae81572f06e1b88fd5ced7a1a000945432e83e1551e6f721ee9c00b8cc33260", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "wit-v1-33-anyone", + "row": [ + [ + 0.0 + ], + "", + "0x5121020202020202020202020202020202020202020202020202020202020202020202", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "wit-v1-33-discourage", + "row": [ + [ + 0.0 + ], + "", + "0x5121020202020202020202020202020202020202020202020202020202020202020202", + "P2SH,WITNESS,TAPROOT,DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM", + "ERR" + ] + }, + { + "id": "wit-v2-32-anyone", + "row": [ + [ + 0.0 + ], + "", + "0x52200202020202020202020202020202020202020202020202020202020202020202", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "wit-v2-32-discourage", + "row": [ + [ + 0.0 + ], + "", + "0x52200202020202020202020202020202020202020202020202020202020202020202", + "P2SH,WITNESS,TAPROOT,DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM", + "ERR" + ] + }, + { + "id": "p2pkh-fast-ok", + "row": [ + "0x4730440220061eaeda269e475c08d0ba279a63c12edd9b81af8a75821355b442854e9dfc5602205c462410513f84454e662c01cf3ad7d322d585a22b22ba72019d7a765999747f0121034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + "0x76a914fc7250a211deddc70ee5a2738de5f07817351cef88ac", + "NONE", + "OK" + ] + }, + { + "id": "p2pkh-fast-mutated", + "row": [ + "0x4730440220061eaeda269e475c08d0ba279a63c12edd9b81af8a75821355b442854e9dfc5602205c462410513f84454e662c01cf3ad7d322d585a22b22ba72019d7a765999747f0121034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + "0x00a914fc7250a211deddc70ee5a2738de5f07817351cef88ac", + "NONE", + "ERR" + ] + }, + { + "id": "p2pkh-fad-collision", + "row": [ + "0x14fc7250a211deddc70ee5a2738de5f07817351cef21034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + "0x76a914fc7250a211deddc70ee5a2738de5f07817351cef88ac", + "NONE", + "ERR" + ] + }, + { + "id": "p2wpkh-fast-ok", + "row": [ + [ + "3045022100ca6686a9cb92ef15c04b9614239979fa65dd7afc482d7b1b0227c2bb10e0205202202278676f7344889f2f8f5fb6d30f56a8630ed4e2c80acd3ae568e5b5925368f601", + "034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x0014fc7250a211deddc70ee5a2738de5f07817351cef", + "P2SH,WITNESS", + "OK" + ] + }, + { + "id": "p2wpkh-fast-mutated", + "row": [ + [ + "3045022100ca6686a9cb92ef15c04b9614239979fa65dd7afc482d7b1b0227c2bb10e0205202202278676f7344889f2f8f5fb6d30f56a8630ed4e2c80acd3ae568e5b5925368f601", + "034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x0014fd7250a211deddc70ee5a2738de5f07817351cef", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "p2tr-keypath-ok", + "row": [ + [ + "912cf8f830d6b098935478663a228f6498b8726ee36c115fb7429775031c73a0a6a746048b691a7c5fddb1cd43abba1549d3d3094f7b944df17bcb99c3114772", + 0.0 + ], + "", + "0x51202a64b1ee3375f3bb4b367b8cb8384a47f73cf231717f827c6c6fbbf5aecf0c36", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "p2tr-keypath-mutated", + "row": [ + [ + "912cf8f830d6b098935478663a228f6498b8726ee36c115fb7429775031c73a0a6a746048b691a7c5fddb1cd43abba1549d3d3094f7b944df17bcb99c3114772", + 0.0 + ], + "", + "0x51202b64b1ee3375f3bb4b367b8cb8384a47f73cf231717f827c6c6fbbf5aecf0c36", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "tapleaf-unknown-521", + "row": [ + [ + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "51", + "c34f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x5120648119d15a3f8243de82c8db94bd0b490eae4957fbb0b1bc1dd8c212b50f462e", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "tapleaf-unknown-1001", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "51", + "c34f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x5120648119d15a3f8243de82c8db94bd0b490eae4957fbb0b1bc1dd8c212b50f462e", + "P2SH,WITNESS,TAPROOT", + "OK" + ] + }, + { + "id": "tapleaf-known-521", + "row": [ + [ + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "51", + "c04f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x5120453437f488e45da0f00dad46cc409187ff546c8f706c931bf2dbe73681102c6e", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "tapleaf-known-1001", + "row": [ + [ + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "01", + "51", + "c04f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa", + 0.0 + ], + "", + "0x5120453437f488e45da0f00dad46cc409187ff546c8f706c931bf2dbe73681102c6e", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "p2sh-witness-unexpected", + "row": [ + [ + "01", + 0.0 + ], + "0x0151", + "0xa914da1745e9b549bd0bfa1a569971c77eba30cd5a4b87", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "p2sh-witness-empty-script", + "row": [ + [ + 0.0 + ], + "", + "0xa914da1745e9b549bd0bfa1a569971c77eba30cd5a4b87", + "P2SH,WITNESS", + "ERR" + ] + }, + { + "id": "p2wpkh-low-s-witness-len", + "row": [ + [ + "01", + 0.0 + ], + "", + "0x0014fc7250a211deddc70ee5a2738de5f07817351cef", + "P2SH,WITNESS,LOW_S", + "ERR" + ] + }, + { + "id": "checksigverify-empty-32-tap", + "row": [ + [ + "#SCRIPT# 0x00200202020202020202020202020202020202020202020202020202020202020202ad", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + }, + { + "id": "schnorr-bad-len-tap", + "row": [ + [ + "#SCRIPT# 0x0101200202020202020202020202020202020202020202020202020202020202020202ac", + "#CONTROLBLOCK#", + 0.0 + ], + "", + "0x51 0x20 #TAPROOTOUTPUT#", + "P2SH,WITNESS,TAPROOT", + "ERR" + ] + } +] diff --git a/docs/consensus-tests.md b/docs/consensus-tests.md index bfda6eae2..e75388e22 100644 --- a/docs/consensus-tests.md +++ b/docs/consensus-tests.md @@ -2,7 +2,7 @@ Every consensus rule **we implement** (not delegated wholesale to rust-bitcoin) has an automated test that would fail if the check were removed or inverted. -**Out of scope:** full secp256k1 / script-interpreter opcode parity vs Core; every historical mainnet retarget. One boundary is pinned: height 32256 compact `0x1d00d86a`, plus the quarter, 4×, and pow-limit clamp literals (`mainnet_retarget_32256_matches_core_compact`, `retarget_clamps_timespan_and_caps_at_pow_limit`). +**Out of scope:** secp256k1, which stays the shared library. Script opcode parity against Bitcoin Core is this corpus (`crates/rbitcoin-consensus/tests/fixtures/script_corpus/`) plus Core's JSON (`script_tests.json`, `tx_valid.json`, `tx_invalid.json`, `sighash.json`), both checked against Core v31.1 `VerifyScript`. Not every historical mainnet retarget. One boundary is pinned: height 32256 compact `0x1d00d86a`, plus the quarter, 4×, and pow-limit clamp literals (`mainnet_retarget_32256_matches_core_compact`, `retarget_clamps_timespan_and_caps_at_pow_limit`). ## Running @@ -17,6 +17,8 @@ cargo test -p rbitcoin-consensus --lib core_script_tests_all_rows -- --nocapture cargo test -p rbitcoin-consensus --lib core_tx_ -- --nocapture cargo test -p rbitcoin-consensus --lib core_sighash -- --nocapture cargo test -p rbitcoin-consensus --lib core_bip341 -- --nocapture +cargo test -p rbitcoin-consensus --lib script_corpus_rows_match_our_interpreter -- --quiet +cargo test --manifest-path script-oracle/Cargo.toml --quiet cargo test -p rbitcoin-consensus --lib block_866342 -- --nocapture cargo test -p rbitcoin-consensus --test script_edge_fixtures # broader integration still covers connect success paths: @@ -37,6 +39,7 @@ refreshing; do not check copies into `tests/fixtures/`. | `tx_invalid.json` | same | `script::core_tx_vectors::core_tx_invalid_all_rows` | every data row reject | | `sighash.json` | same | `script::core_sighash::core_sighash_all_rows` | every data row digest matches Core | | `bip341_wallet_vectors.json` | same | `script::core_bip341::core_bip341_wallet_vectors_all_rows` | key-path fully-signed + per-input spends accept; unknown-leaf script-path accepts | +| `script_corpus/script_tests.json` | `tests/fixtures/script_corpus/` (ours, Core row form) | `script::core_vectors::script_corpus_rows_match_our_interpreter` and `script-oracle` | every row accept/reject matches the file; the oracle is Core v31.1 `VerifyScript` | | mainnet 866342 + prevouts | `tests/fixtures/block_866342/` (Floresta zstd) | `block::block_866342::block_866342_structure_scripts_and_overweight` | structure at height + every non-coinbase `verify_job_all_inputs`; extra-NOP clone is 4_000_001 WU | ### How the harness works diff --git a/script-oracle/Cargo.lock b/script-oracle/Cargo.lock new file mode 100644 index 000000000..198515582 --- /dev/null +++ b/script-oracle/Cargo.lock @@ -0,0 +1,370 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "arc-swap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c049c0be4daef0b145cb3555416b3b8ef5b7888a38aea1a3a155801fe7b0810b" +dependencies = [ + "rustversion", +] + +[[package]] +name = "arrayvec" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3fb67a6e08acf24fdeccbac2cb6ac4305825bd1f117462e0e6f2f193345ad56" + +[[package]] +name = "base58ck" +version = "0.1.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "365c0acd5b2e8dd0111a46c4faea83fb3cfb6e39a49a7c73a06e090db7b2eff0" +dependencies = [ + "bitcoin_hashes", +] + +[[package]] +name = "bech32" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32637268377fc7b10a8c6d51de3e7fba1ce5dd371a96e342b34e6078db558e7f" + +[[package]] +name = "bitcoin" +version = "0.32.102" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb0ce8bd5baaa0d303a19915a6d93afed161f528654e42da2a7a97d05c59499a" +dependencies = [ + "base58ck", + "bech32", + "bitcoin-io", + "bitcoin-units", + "bitcoin_hashes", + "hex-conservative 0.2.3", + "hex_lit", + "secp256k1", +] + +[[package]] +name = "bitcoin-consensus-encoding" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9daa31138eb443d5751b207f3f64154e2bb09cd59960562ccc7a7112be38147f" +dependencies = [ + "bitcoin-internals", + "hex-conservative 1.3.0", + "serde", +] + +[[package]] +name = "bitcoin-internals" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8bea3a9f0cfece4564e37cb49a38cc245ca5184719e50d7d0dda3268722c4e2" + +[[package]] +name = "bitcoin-io" +version = "0.1.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb5de036369d1ac59d3c1819ebc4d850f89466f5401c571a285b6ed564a4cb78" +dependencies = [ + "bitcoin-consensus-encoding", +] + +[[package]] +name = "bitcoin-units" +version = "0.1.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cb95693f371d089a4b5b6fc41c6f3ea6e01ee8c15388335dfac8ea685173b51" +dependencies = [ + "bitcoin-consensus-encoding", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bca4c7abb40c8817d77403c880988cfd484f23ab2365726afb2f798363e2c4a2" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.3", +] + +[[package]] +name = "bitflags" +version = "2.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ded4057c258ba199e2d26386d3af3780957ecaee6c4ef4041c6b4b8b97c0b06" + +[[package]] +name = "cc" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6651c9ed80effdc7db0ff72512157f901af5e3549e341e24b1dd4887d836d838" +dependencies = [ + "find-msvc-tools", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600" + +[[package]] +name = "find-msvc-tools" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedcfb3409746eddb02b9e19ebda1c3394f759a152e48ee875a0844d1b955484" + +[[package]] +name = "getrandom" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099" +dependencies = [ + "cfg-if", + "libc", + "r-efi", +] + +[[package]] +name = "hex-conservative" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3fef046dca3ca91ee1408a8c1b80ab777e80a4d308d1bf4e7adb3fcb047e08" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex-conservative" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "271e0d19bcb473b6675739a2b536076b24a082316cb5199ad918edce10c599e8" +dependencies = [ + "arrayvec", +] + +[[package]] +name = "hex_lit" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3011d1213f159867b13cfd6ac92d2cd5f1345762c63be3554e84092d85a50bbd" + +[[package]] +name = "io-uring" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3bd0ecfbb87805f538bb7b32e5239ca0763890c623e349860ecba69469f2bb" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.191" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65cd87c9a6d60536580b316ad985726104730a5151c99845f2490428ef91240a" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "mutants" +version = "0.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add0ac067452ff1aca8c5002111bd6b1c895baee6e45fcbc44e0193aea17be56" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" + +[[package]] +name = "rbitcoin-consensus" +version = "0.8.99" +dependencies = [ + "arc-swap", + "bitcoin", + "bitcoin_hashes", + "mutants", + "rbitcoin-log", + "rbitcoin-primitives", + "rbitcoin-query", + "rbitcoin-store", + "serde_json", +] + +[[package]] +name = "rbitcoin-log" +version = "0.8.99" + +[[package]] +name = "rbitcoin-primitives" +version = "0.8.99" + +[[package]] +name = "rbitcoin-query" +version = "0.8.99" +dependencies = [ + "arc-swap", + "bitcoin", + "mutants", + "rbitcoin-log", + "rbitcoin-primitives", + "rbitcoin-store", +] + +[[package]] +name = "rbitcoin-store" +version = "0.8.99" +dependencies = [ + "bitcoin_hashes", + "getrandom", + "io-uring", + "libc", + "rbitcoin-log", + "rbitcoin-primitives", +] + +[[package]] +name = "rustversion" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f" + +[[package]] +name = "script-oracle" +version = "0.0.0" +dependencies = [ + "bitcoin", + "cc", + "rbitcoin-consensus", + "serde_json", +] + +[[package]] +name = "secp256k1" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9465315bc9d4566e1724f0fffcbcc446268cb522e60f9a27bcded6b19c108113" +dependencies = [ + "bitcoin_hashes", + "secp256k1-sys", +] + +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.154" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7e9cc8b1b85264074fbcc02a88680c4096b1e47df8f739dceb03bf482f04bd6" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "shlex" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba" + +[[package]] +name = "syn" +version = "3.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d78c8dee4c7bf0e14673097256fed6142ce9d3b85a408189d07482442145823b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2c754d6c33795a1c324727428e5a7dedb5b06195f9890bdbcba760d3e246563" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/script-oracle/Cargo.toml b/script-oracle/Cargo.toml new file mode 100644 index 000000000..08ec6ef37 --- /dev/null +++ b/script-oracle/Cargo.toml @@ -0,0 +1,18 @@ +[workspace] + +[package] +name = "script-oracle" +version = "0.0.0" +edition = "2021" +publish = false +description = "Bitcoin Core v31.1 VerifyScript oracle for the script corpus. Not a workspace member." + +[dependencies] +bitcoin = "=0.32.102" +serde_json = "1" + +[dev-dependencies] +rbitcoin-consensus = { path = "../crates/rbitcoin-consensus", features = ["corpus"] } + +[build-dependencies] +cc = "1" diff --git a/script-oracle/build.rs b/script-oracle/build.rs new file mode 100644 index 000000000..d8f544b36 --- /dev/null +++ b/script-oracle/build.rs @@ -0,0 +1,113 @@ +use std::io::Write; +use std::path::{Path, PathBuf}; +use std::process::{Command, Stdio}; + +fn main() { + let manifest = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap()); + let repo = manifest.join(".."); + let submodule = repo.join("third_party/bitcoin"); + let out = PathBuf::from(std::env::var("OUT_DIR").unwrap()).join("core"); + let src = out.join("src"); + if !src.join("script/interpreter.cpp").is_file() { + std::fs::create_dir_all(&out).unwrap(); + if !archive(&submodule, &out) { + let init = Command::new(repo.join("scripts/core-functional/init-submodule.sh")) + .status() + .expect("run init-submodule.sh"); + assert!(init.success(), "init-submodule.sh failed"); + let add = Command::new("git") + .args(["-C"]) + .arg(&submodule) + .args(["sparse-checkout", "add", "src"]) + .status() + .expect("sparse-checkout"); + assert!(add.success(), "sparse-checkout add src failed"); + let checkout = Command::new("git") + .args(["-C"]) + .arg(&submodule) + .args(["checkout", "HEAD", "--", "src"]) + .status() + .expect("checkout src"); + assert!(checkout.success(), "checkout src failed"); + assert!(archive(&submodule, &out), "git archive of Core src failed"); + } + } + assert!( + src.join("script/interpreter.cpp").is_file(), + "missing {}", + src.join("script/interpreter.cpp").display() + ); + + cc::Build::new() + .cpp(true) + .std("c++20") + .include(&src) + .include(src.join("secp256k1/include")) + .flag_if_supported("-Wno-unused-parameter") + .flag_if_supported("-Wno-implicit-fallthrough") + .file(manifest.join("verify.cpp")) + .file(src.join("script/interpreter.cpp")) + .file(src.join("script/script.cpp")) + .file(src.join("script/script_error.cpp")) + .file(src.join("primitives/transaction.cpp")) + .file(src.join("pubkey.cpp")) + .file(src.join("hash.cpp")) + .file(src.join("uint256.cpp")) + .file(src.join("arith_uint256.cpp")) + .file(src.join("crypto/ripemd160.cpp")) + .file(src.join("crypto/sha1.cpp")) + .file(src.join("crypto/sha256.cpp")) + .file(src.join("crypto/sha512.cpp")) + .file(src.join("crypto/hmac_sha512.cpp")) + .file(src.join("crypto/hex_base.cpp")) + .file(src.join("util/strencodings.cpp")) + .file(src.join("streams.cpp")) + .file(src.join("support/cleanse.cpp")) + .compile("coreverify"); + + cc::Build::new() + .include(src.join("secp256k1/include")) + .include(src.join("secp256k1/src")) + .define("ENABLE_MODULE_SCHNORRSIG", "1") + .define("ENABLE_MODULE_EXTRAKEYS", "1") + .define("ENABLE_MODULE_ELLSWIFT", "1") + .define("ENABLE_MODULE_RECOVERY", "1") + .define("ECMULT_WINDOW_SIZE", "15") + .define("ECMULT_GEN_PREC_BITS", "4") + .define("USE_FIELD_5X52", "1") + .define("USE_SCALAR_4X64", "1") + .define("HAVE___INT128", "1") + .flag_if_supported("-Wno-unused-function") + .file(src.join("secp256k1/src/secp256k1.c")) + .file(src.join("secp256k1/src/precomputed_ecmult.c")) + .file(src.join("secp256k1/src/precomputed_ecmult_gen.c")) + .compile("secp256k1oracle"); + + println!("cargo:rerun-if-changed=verify.cpp"); + println!("cargo:rerun-if-changed=build.rs"); +} + +fn archive(submodule: &Path, out: &Path) -> bool { + let archived = Command::new("git") + .args(["-C"]) + .arg(submodule) + .args(["archive", "HEAD", "src"]) + .output() + .expect("git archive"); + if !archived.status.success() || archived.stdout.is_empty() { + return false; + } + let mut tar = Command::new("tar") + .args(["-C"]) + .arg(out) + .arg("-x") + .stdin(Stdio::piped()) + .spawn() + .expect("tar"); + tar.stdin + .take() + .unwrap() + .write_all(&archived.stdout) + .unwrap(); + tar.wait().expect("tar wait").success() +} diff --git a/script-oracle/src/lib.rs b/script-oracle/src/lib.rs new file mode 100644 index 000000000..6d324148e --- /dev/null +++ b/script-oracle/src/lib.rs @@ -0,0 +1,193 @@ +//! Bitcoin Core v31.1 `VerifyScript` for the in-tree script corpus. +//! +//! Not a workspace member: the main graph must not link `bitcoinconsensus` +//! (that crates.io crate is Core 26). This crate compiles `VerifyScript` +//! from `third_party/bitcoin` at the v31.1 pin. The Rust side only runs +//! as tests; the C++ wrapper is what the build script links. + +#[cfg(test)] +mod tests { + use bitcoin::consensus::encode::serialize; + use bitcoin::script::ScriptBuf; + use bitcoin::{Amount, Transaction, Witness}; + use rbitcoin_consensus::core_script::{credit_and_spend, spend_shape_from_json}; + + const P2SH: u64 = 1 << 0; + const STRICTENC: u64 = 1 << 1; + const DERSIG: u64 = 1 << 2; + const LOW_S: u64 = 1 << 3; + const NULLDUMMY: u64 = 1 << 4; + const SIGPUSHONLY: u64 = 1 << 5; + const MINIMALDATA: u64 = 1 << 6; + const DISCOURAGE_NOPS: u64 = 1 << 7; + const CLEANSTACK: u64 = 1 << 8; + const CLTV: u64 = 1 << 9; + const CSV: u64 = 1 << 10; + const WITNESS: u64 = 1 << 11; + const DISCOURAGE_WITNESS: u64 = 1 << 12; + const MINIMALIF: u64 = 1 << 13; + const NULLFAIL: u64 = 1 << 14; + const WITNESS_PUBKEYTYPE: u64 = 1 << 15; + const CONST_SCRIPTCODE: u64 = 1 << 16; + const TAPROOT: u64 = 1 << 17; + const DISCOURAGE_TAPROOT: u64 = 1 << 18; + const DISCOURAGE_SUCCESS: u64 = 1 << 19; + const DISCOURAGE_PUBKEY: u64 = 1 << 20; + + extern "C" { + fn rbtc_core_verify( + tx: *const u8, + tx_len: usize, + spk: *const u8, + spk_len: usize, + amount: i64, + input_index: u32, + flags: u64, + ) -> i32; + } + + fn flags_from_core(text: &str) -> u64 { + if text.is_empty() || text.eq_ignore_ascii_case("NONE") { + return 0; + } + let mut flags = 0u64; + for part in text.split(',') { + match part.trim().to_ascii_uppercase().as_str() { + "" => {} + "P2SH" => flags |= P2SH, + "STRICTENC" => flags |= STRICTENC | DERSIG, + "DERSIG" => flags |= DERSIG, + "LOW_S" => flags |= LOW_S | DERSIG, + "NULLDUMMY" => flags |= NULLDUMMY, + "SIGPUSHONLY" => flags |= SIGPUSHONLY, + "MINIMALDATA" => flags |= MINIMALDATA, + "DISCOURAGE_UPGRADABLE_NOPS" => flags |= DISCOURAGE_NOPS, + "CLEANSTACK" => flags |= CLEANSTACK, + "CHECKLOCKTIMEVERIFY" => flags |= CLTV, + "CHECKSEQUENCEVERIFY" => flags |= CSV, + "WITNESS" => flags |= WITNESS, + "MINIMALIF" => flags |= MINIMALIF, + "NULLFAIL" => flags |= NULLFAIL, + "WITNESS_PUBKEYTYPE" => flags |= WITNESS_PUBKEYTYPE, + "CONST_SCRIPTCODE" => flags |= CONST_SCRIPTCODE, + "TAPROOT" | "TAPSCRIPT" => flags |= TAPROOT | WITNESS, + "DISCOURAGE_UPGRADABLE_WITNESS_PROGRAM" => flags |= DISCOURAGE_WITNESS, + "DISCOURAGE_UPGRADABLE_TAPROOT_VERSION" => flags |= DISCOURAGE_TAPROOT, + "DISCOURAGE_OP_SUCCESS" => flags |= DISCOURAGE_SUCCESS, + "DISCOURAGE_UPGRADABLE_PUBKEYTYPE" => flags |= DISCOURAGE_PUBKEY, + other => panic!("unknown script flag {other}"), + } + } + flags + } + + fn core_accepts(spend: &Transaction, spk: &[u8], amount: i64, flags: u64) -> Result { + let raw = serialize(spend); + let rc = unsafe { + rbtc_core_verify( + raw.as_ptr(), + raw.len(), + spk.as_ptr(), + spk.len(), + amount, + 0, + flags, + ) + }; + match rc { + 1 => Ok(true), + 0 => Ok(false), + other => Err(other), + } + } + + fn witness_from_cell(cell: &serde_json::Value) -> (Witness, Amount, Option<[u8; 32]>) { + let arr = cell.as_array().expect("witness cell"); + let mut amount = Amount::ZERO; + let mut stack: Vec> = Vec::new(); + let mut tap_out = None; + for (i, item) in arr.iter().enumerate() { + if let Some(n) = item.as_f64() { + if i + 1 == arr.len() || item.as_str().is_none() { + let sats = (n * 100_000_000.0).round() as i64; + amount = Amount::from_sat(sats.max(0) as u64); + continue; + } + } + if let Some(s) = item.as_str() { + rbitcoin_consensus::core_script::push_core_witness_token( + &mut stack, + &mut tap_out, + s, + ) + .unwrap_or_else(|e| panic!("witness token: {e}")); + } else if let Some(n) = item.as_f64() { + let sats = (n * 100_000_000.0).round() as i64; + amount = Amount::from_sat(sats.max(0) as u64); + } + } + let refs: Vec<&[u8]> = stack.iter().map(|v| v.as_slice()).collect(); + let witness = Witness::from_slice(&refs); + (witness, amount, tap_out) + } + + #[test] + fn script_corpus_matches_core_verify_script() { + let path = std::path::Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../crates/rbitcoin-consensus/tests/fixtures/script_corpus/script_tests.json"); + let text = std::fs::read_to_string(&path).unwrap_or_else(|e| panic!("read {path:?}: {e}")); + let rows: Vec = serde_json::from_str(&text).unwrap(); + assert!(!rows.is_empty()); + for row in &rows { + let id = row["id"].as_str().unwrap(); + let cells = row["row"].as_array().unwrap(); + let (witness, amount, sig_s, pk_s, flag_text, expect, tap_out) = if cells[0].is_array() + { + assert!(cells.len() >= 5, "{id}"); + let (witness, amount, tap_out) = witness_from_cell(&cells[0]); + ( + witness, + amount, + cells[1].as_str().unwrap(), + cells[2].as_str().unwrap(), + cells[3].as_str().unwrap(), + cells[4].as_str().unwrap(), + tap_out, + ) + } else { + assert!(cells.len() >= 4, "{id}"); + ( + Witness::new(), + Amount::ZERO, + cells[0].as_str().unwrap(), + cells[1].as_str().unwrap(), + cells[2].as_str().unwrap(), + cells[3].as_str().unwrap(), + None, + ) + }; + let sig = rbitcoin_consensus::core_script::assemble_script(sig_s) + .unwrap_or_else(|e| panic!("{id} scriptSig: {e}")); + let pk = rbitcoin_consensus::core_script::assemble_script_pubkey(pk_s, tap_out) + .unwrap_or_else(|e| panic!("{id} scriptPubKey: {e}")); + let shape = spend_shape_from_json(row.get("spend")) + .unwrap_or_else(|e| panic!("{id} spend: {e}")); + let (_credit, spend) = credit_and_spend( + ScriptBuf::from_bytes(pk.clone()), + ScriptBuf::from_bytes(sig), + witness, + amount, + shape, + ); + let spk = pk; + let got = core_accepts( + &spend, + &spk, + amount.to_sat() as i64, + flags_from_core(flag_text), + ) + .unwrap_or_else(|rc| panic!("{id}: Core verify status {rc}")); + assert_eq!(got, expect == "OK", "{id}"); + } + } +} diff --git a/script-oracle/verify.cpp b/script-oracle/verify.cpp new file mode 100644 index 000000000..31c014980 --- /dev/null +++ b/script-oracle/verify.cpp @@ -0,0 +1,47 @@ +#include +#include