#![no_main]

use {
  bitcoin::{
    locktime, opcodes,
    script::{self, PushBytes},
    Transaction, TxOut,
  },
  libfuzzer_sys::fuzz_target,
  ord::runes::Runestone,
};

fuzz_target!(|input: Vec<Vec<u8>>| {
  let mut builder = script::Builder::new()
    .push_opcode(opcodes::all::OP_RETURN)
    .push_slice(b"RUNE_TEST");

  for slice in input {
    let Ok(push): Result<&PushBytes, _> = slice.as_slice().try_into() else {
      continue;
    };
    builder = builder.push_slice(push);
  }

  let tx = Transaction {
    input: Vec::new(),
    lock_time: locktime::absolute::LockTime::ZERO,
    output: vec![TxOut {
      script_pubkey: builder.into_script(),
      value: 0,
    }],
    version: 0,
  };

  Runestone::from_transaction(&tx);
});