# `OP_TEMPLATEHASH` test vectors

The test vectors are split into basic sanity checks and more extensive coverage. Both are JSON files containing a JSON
array of JSON objects. Each JSON object in the array represents a Script validation test case.

For [`basics.json`](basics.json), each object contains the following fields:
- `spending_tx`: a hexadecimal string representing a serialized Bitcoin transaction. This is the transaction to be
  validated.
- `input_index`: a JSON integer representing the index of the transaction input for which to perform Script validation.
- `spent_outputs`: a JSON array of hexadecimal strings representing serialized Bitcoin transaction outputs. This is the
  list of outputs pointed to by the inputs of the transaction to be validated.
- `valid`: a JSON boolean. Whether script validation should succeed.
- `comment`: a JSON string. Reason why script validation should succeed or fail.

For [`script_assets_test.json`](script_assets_test.json), each object contains the following fields:
- `tx`: a hexadecimal string representing a serialized Bitcoin transaction. This is the transaction to be validated.
- `index`: a JSON integer representing the index of the transaction input for which to perform Script validation.
- `prevouts`: a JSON array of hexadecimal strings representing serialized Bitcoin transaction outputs. This is the list
  of outputs pointed to by the inputs of the transaction to be validated.
- `flags`: a JSON array of strings representing the script validation flags to enable for this test case.
- `success`: an optional JSON object representing the transaction input fields to set such as script validation
  succeeds. The subfields are the following:
    - `scriptSig`: a JSON hexadecimal string representing the serialized input script.
    - `witness`: a JSON array of hexadecimal strings representing the witness stack for this input.
- `final`: an optional JSON boolean which, if true, indicates script validation should always succeed with more
  validation flags than specified in `flags`.
- `failure`: an optional JSON object representing the transaction input fields to set such as script validation
  fails. The subfields are the following:
    - `scriptSig`: a JSON hexadecimal string representing the serialized input script.
    - `witness`: a JSON array of hexadecimal strings representing the witness stack for this input.

Location of code that generated the test [`basics.json`](basics.json) [here](https://github.com/instagibbs/bitcoin/blob/2025-07-op_templatehash/src/test/script_tests.cpp#L1820). Example usage of [`script_assets_test.json`](script_assets_test.json) [here](https://github.com/bitcoin/bitcoin/blob/f490f5562d4b20857ef8d042c050763795fd43da/src/test/script_tests.cpp#L1558).
